Creo que devconcept lo explicando muy bien en su respuesta. Yo estuve trasteando con CORS y Slack y he decidido reescribir mi respuesta con lo que he averiguado por aportar algo mas.
La petición que estás intentando hacer para descargar un archivo requiere autenticación, este fué un cambio que introdujeron en enero del 2016 y que lo anunciaron con este artículo en ingles
Por lo tanto la petición de descarga de archivos debe incluir el encabezado de autenticación.
$http( method: 'GET', url: url_private_download, headers: { Authorization: 'Bearer '+ token,'Content-Type': 'application/x-www-form-urlencoded;charset=utf8' }});
Y, como ha explicado devconcept, esta petición activa el modo preflight enviando una primera petición OPTIONS
que no incluye el encabezado Authorization
. Cuando Slack recibe esa petición responde con un `HTTP 301' con la redirección a la página de inicio de sesión porque esa petición requiere autenticación, es decir, Slack no está preparado para esta petición.
Desde cliente se podría hacer una petición de descarga de archivo sin incluir el encabezado Authorization
pero habiéndose autenticado previamente en Slack con usuario y contraseña, porque la autenticación se realizaría a través de la cookie.
El código sería este: (aunque no tiene mucho sentido hacer esto desde cliente)
$http( method: 'GET', url: url_private_download, headers: {'Content-Type': 'application/x-www-form-urlencoded;charset=utf8' }});
Definitivamente, y según decías en un comentario que se trataba de un bot, creo que estás haciendo en cliente algo que deberías estar haciendo en servidor y quizás estás exponiendo información sensible que podría usar en tu contra un usuario malicioso.
Muchas veces no reparamos en las cuestiones de seguridad pero son muy importantes, a míesta charla que Chema Alonso dio en la DotNetSpain 2016 me hizo concienciarme aún más con ello.
Espero haber aportado algo con mi respuesta, saludos.
Actualización 28/03/2016: Aclarar la parte de la redirección a la página de inicio de sesión de Slack, motivada por el comentario de devconcept