services restful practices best basics rest curl basic-authentication access-token restful-authentication

restful - rest services authentication



Autenticación básica de HTTP y token de portador (5)

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 intentado esto:

curl -i http://dev.myapp.com/api/users / -H "Authorization: Basic Ym9zY236Ym9zY28=" / -H "Authorization: Bearer mytoken123"

Podría, por ejemplo, desactivar la autenticación HTTP para mi IP, pero como normalmente trabajo en diferentes entornos con direcciones IP dinámicas, esta no es una buena solución. Entonces, ¿me estoy perdiendo algo?


curl --anyauth

Le dice a Curl que descubra el método de autenticación por sí mismo, y use el más seguro que el sitio remoto dice que admite. Esto se hace primero haciendo una solicitud y verificando los encabezados de respuesta, lo que posiblemente induce una red adicional de ida y vuelta. Esto se usa en lugar de establecer un método de autenticación específico, que puede hacer con --basic, --digest, --ntlm y --negotiate.


Estándar ( https://tools.ietf.org/html/rfc6750 ) dice que puede usar:

  • Parámetro del cuerpo codificado en el formulario: Autorización: Portador mytoken123
  • Parámetro de consulta de URI: access_token = mytoken123

Por lo tanto, es posible pasar muchos tokens de portador con URI, pero se desaconseja hacer esto (ver la sección 5 en el estándar).


Pruebe este para impulsar la autenticación básica en url:

curl -i http://username:[email protected]/api/users -H "Authorization: Bearer mytoken123" ^^^^^^^^^^^^^^^^^^

Si el anterior no funciona, entonces no tienes nada que ver con eso. Entonces prueba las siguientes alternativas.

Puedes pasar el token con otro nombre. Porque maneja la autorización de su Aplicación. Entonces puede usar esta flexibilidad fácilmente para este propósito especial.

curl -i http://dev.myapp.com/api/users / -H "Authorization: Basic Ym9zY236Ym9zY28=" / -H "Application-Authorization: mytoken123"

Tenga en cuenta que he cambiado el encabezado a Application-Authorization . Entonces, desde su aplicación, capture el token bajo ese encabezado y procese lo que necesita hacer.

Otra cosa que puede hacer es pasar el token través de los parámetros POST y tomar el valor del parámetro desde el lado del servidor. Por ejemplo, pasar token con el parámetro curl post:

-d "auth-token=mytoken123"


Si está utilizando un proxy inverso como nginx en el medio, puede definir un token personalizado, como X-API-Token .

En nginx deberías reescribirlo para el proxy ascendente (tu api de descanso) para que sea solo auth:

proxy_set_header Authorization $http_x_api_token;

... mientras que nginx puede usar el encabezado de Autorización original para verificar HTTP AUth.


Tuve un problema similar: autenticación de dispositivo y usuario en el dispositivo. Utilicé un encabezado Cookie junto a un encabezado Authorization: Bearer...