Me preguntaba si es aceptable poner datos personalizados en un encabezado de autorización HTTP. Estamos diseñando una API RESTful y es posible que necesitemos una forma de especificar un método de autorización personalizado. Como ejemplo, llamémosle FIRE-TOKEN
autenticación.
¿Algo como esto sería válido y permitido según la especificación: Authorization: FIRE-TOKEN 0PN5J17HBGZHT7JJ3X82:frJIUN8DYpKDtOLCwo//yllqDzg=
La primera parte de la segunda cadena (antes de ':') es la clave API, la segunda parte es un hash de cadena de consulta.
fuente
Póngalo en un encabezado separado y personalizado.
La sobrecarga de los encabezados HTTP estándar probablemente causará más confusión de lo que vale, y violará el principio de menor sorpresa . También podría generar problemas de interoperabilidad para los programadores de sus clientes API que deseen utilizar kits de herramientas estándar que solo pueden manejar la forma estándar de los encabezados HTTP típicos (como
Authorization
).fuente
Authorization
encabezado estándar de especificaciones con su propio esquema personalizado debería ser más que suficiente. Además, evita las solicitudes de Origen previas al vuelo como indica @wilmoore. Los esquemas personalizados no interfieren con ningún servidor HTTP razonablemente moderno que conozca, además, si usa su propio esquema, tendrá que analizarlo usted mismo: ninguna biblioteca debería entrar en conflicto (de lo contrario, la biblioteca está mal escrita).Authorization
encabezado, en lugar de hacerlo en un encabezado personalizado, es que los proxies y los registradores saben que la información es confidencial.No, esa no es una producción válida según la definición de "credenciales" en RFC 2617 . Usted proporciona un esquema de autenticación válido, pero los valores de parámetro de autenticación deben tener la forma
token "=" ( token | quoted-string )
(consulte la sección 1.2), y su ejemplo no usa "=" de esa manera.fuente
Antigua pregunta que sé, pero para los curiosos:
Lo creas o no, este problema se resolvió hace ~ 2 décadas con HTTP BASIC, que pasa el valor como nombre de usuario codificado en base64: contraseña. (Ver http://en.wikipedia.org/wiki/Basic_access_authentication#Client_side )
Podrías hacer lo mismo, para que el ejemplo anterior se convierta en:
fuente