Uso personalizado del encabezado de autorización en una API REST

10

Estoy construyendo una API REST donde los clientes se autentican usando certificados de cliente. Un cliente en este caso no es un usuario individual, sino una especie de capa de presentación. Los usuarios se autentican utilizando un enfoque personalizado y es responsabilidad de la capa de presentación asegurarse de que esto se realice correctamente (nota: sé que este no es el enfoque adecuado, pero la API no es pública).

Me gustaría pasar el nombre de usuario para cada solicitud (no la contraseña), pero no estoy seguro de dónde hacerlo. ¿Sería una buena idea usar el encabezado de autorización?

Matsen75
fuente

Respuestas:

21

Usar el encabezado de autorización parece ser lo correcto. Es todo el propósito del encabezado de autorización.

De http://tools.ietf.org/html/rfc7235#section-4.2 :

El campo de encabezado "Autorización" permite que un agente de usuario se autentique con un servidor de origen, generalmente, pero no necesariamente, después de recibir una respuesta 401 (no autorizada). Su valor consiste en credenciales que contienen la información de autenticación del agente de usuario para el ámbito del recurso que se solicita.

Si tiene su propio esquema de autenticación, documente, pero no es necesario reinventar la rueda.

Zach Dennis
fuente
3
No solo parece lo correcto, es lo correcto. (He estado investigando esto todo el día) La Sección 4.1 en RFC 7235 demuestra expresamente el uso de un esquema personalizado "Newauth" en "Por ejemplo", junto con un esquema estándar "Básico" que permite al cliente usar su elección de cualquiera de los esquemas . Dicho esto, si está utilizando un esquema "estándar", debe usarlo correctamente. La respuesta de Zach es correcta y la de Filip es incorrecta .
Stephen P
3

No recomendaría que haga un uso no estándar de un encabezado HTTP estándar. Principalmente porque puede ser engañoso para otros desarrolladores que saben cómo Authoriziationse debe usar el encabezado en la autenticación HTTP, pero también para evitar cualquier problema potencial con otras partes de su pila que tengan un conocimiento conflictivo del mismo encabezado de solicitud.

Cualquiera sea el caso, no hay nada que le impida utilizar un X-Authorization-Userencabezado personalizado, no estándar , específicamente para sus propósitos.

Filip Dupanović
fuente
100% de acuerdo. Si desea hacer algo personalizado, para eso están los X-encabezados prefijados. Si va a usar un encabezado estándar, no lo use para nada inusual o inesperado.
Carson63000
2
Solo pensé que debería mencionar que la "X-" ha quedado en desuso: stackoverflow.com/questions/3561381/…
Matsen75
Según esta respuesta, ¿eso significa que Amazon S3 lo está haciendo mal? docs.aws.amazon.com/AmazonS3/latest/dev/RESTAuthentication.html
Tom Lianza
44
-1. Como mencionó Zach Dennis, a diferencia de la mayoría de los otros encabezados HTTP, el encabezado de autorización está diseñado para extenderse y hay una forma claramente especificada sobre cómo definir su propio esquema de autorización. En pocas palabras, solo asegúrese de usar un nombre de esquema de autorización personalizado.
Lie Ryan