Actualmente estoy desarrollando una REST-API que está protegida por HTTP-Basic para el entorno de desarrollo. Como la autenticación real se realiza a través de un token, todavía estoy tratando de averiguar cómo enviar dos encabezados de autorización.
He probado este:
curl -i http://dev.myapp.com/api/users \
-H "Authorization: Basic Ym9zY236Ym9zY28=" \
-H "Authorization: Bearer mytoken123"
Podría, por ejemplo, deshabilitar la autenticación HTTP para mi IP, pero como suelo trabajar en diferentes entornos con IP dinámicas, esta no es una buena solución. Entonces, ¿me estoy perdiendo algo?
400 Bad request
. Tonto.Respuestas:
Pruebe este para impulsar la autenticación básica en la URL:
Si el anterior no funciona, entonces no tiene nada que ver con él. Así que prueba las siguientes alternativas.
Puede pasar el token con otro nombre. Porque estás manejando la autorización de tu Aplicación. De modo que puede utilizar fácilmente esta flexibilidad para este propósito especial.
Observe que he cambiado el encabezado a
Application-Authorization
. Entonces, desde su aplicación, capture el token debajo de ese encabezado y procese lo que necesita hacer.Otra cosa que puede hacer es, para pasar el
token
a través de losPOST
parámetros y agarrar el valor del parámetro desde el lado del servidor. Por ejemplo, pasando el token con el parámetro de publicación curl:fuente
-v
param. Encontrará que se envíaAuthorization: Basic Ym9zY236Ym9zY28=, Authorization: Bearer mytoken123
en el encabezado de la solicitud. Desde el extremo de su servidor, si marca, encontrará que tiene un encabezado de autorización de esta maneraAuthorization: Basic Ym9zY236Ym9zY28=, Bearer mytoken123
separado por comas. Entonces, pensé que debería sugerirte alternativas.Estándar ( https://tools.ietf.org/html/rfc6750 ) dice que puede usar:
Por lo tanto, es posible pasar muchos Bearer Token con URI, pero no se recomienda hacer esto (consulte la sección 5 del estándar).
fuente
Si está utilizando un proxy inverso como nginx en el medio, puede definir un token personalizado, como
X-API-Token
.En nginx, lo reescribiría para que el proxy ascendente (su api de descanso) sea solo de autenticación:
... mientras que nginx puede usar el encabezado de autorización original para verificar HTTP AUth.
fuente
Tuve un problema similar: autenticar el dispositivo y el usuario en el dispositivo. Usé un
Cookie
encabezado junto a unAuthorization: Bearer...
encabezado.fuente
Cookie
encabezado ya se usa con frecuencia para la autenticación.fuente
Existe otra solución para probar API en el servidor de desarrollo.
HTTP Basic Authentication
solo para rutas webLa configuración del servidor web para
nginx
yLaravel
sería así:Authorization: Bearer
hará el trabajo de defender el servidor de desarrollo contra los rastreadores web y otros visitantes no deseados.fuente
Con nginx puede enviar ambos tokens como este (aunque va en contra del estándar):
Esto funciona siempre que el token básico sea el primero: nginx lo reenvía con éxito al servidor de aplicaciones.
Y luego debe asegurarse de que su aplicación pueda extraer correctamente el Portador de la cadena anterior.
fuente