2012-04-20 14 views
20

He leído RFC 2617 y no encuentro allí ni en ningún otro lugar el delimitador si se admiten varios esquemas. Por ejemplo, supongamos que tanto Basic como Digest son compatibles. Entiendo que puede aparecer de esta manera:¿Cuál es el delimitador para WWW-Authenticate para esquemas múltiples?

HTTP/1.1 401 Unauthorized 
WWW-Authenticate: Basic 
WWW-Authenticate: Digest 

Pero también he leído que tanto se pueden enumerar como una sola línea, pero nadie muestra un ejemplo o describe lo delimitador de usar. He visto precauciones que comas se pueden utilizar dentro de un solo esquema:

HTTP/1.1 401 Unauthorized 
WWW-Authenticate: Digest param1="foo", param2="bar" 

También he leído que si comas se utilizan dentro de un esquema, que otros esquemas deben ser colocados en líneas separadas. Así que me imagino que en el caso anterior si agregamos Basic aparecería así:

HTTP/1.1 401 Unauthorized 
WWW-Authenticate: Digest param1="foo", param2="bar" 
WWW-Authenticate: Basic 

Eso es bastante simple. Pero ahora supongamos que solo tiene una línea

HTTP/1.1 401 Unauthorized 
WWW-Authenticate: Scheme stuff, morestuff, more stuff 

¿Qué es eso? ¿Es una lista de esquemas delimitada por comas, o es ese un esquema, con algunos parámetros?

Respuesta

23

Por lo que puedo decir, the spec punts sobre el tema. Sección 1.2 establece:

Nota: Los agentes de usuario se necesidad de tener especial cuidado en analizar el WWW-Authenticate
o valor del campo de encabezado Proxy-Authenticate si contiene
más de un desafío
, o si más que se proporciona un encabezado WWW-Authenticate
, ya que el contenido de un desafío puede en sí mismo
contener una lista de parámetros de autenticación separados por comas.

creo que podemos traducir especial cuidado a mejor de la suerte cap.

Pragmatismo
En la práctica, sospecho múltiples esquemas significa que uno debe utilizar múltiples wwww-authenticate cabeceras. Los esquemas son extensibles; Por ejemplo, puedo proponer un esquema llamado "fresa" u "opaco" si quiero ser siniestro. Dado esto, no hay realmente una buena manera de analizar un trazador de líneas sin algún tipo de delimitador 'terminación de esquema'.

W3C Discusión
No eres la primera persona con esta pregunta. Hay was a discussion en la lista de correo del W3C. El cartel declaró:

No estaba cuestionando la necesidad de proporcionar múltiples desafíos en una sola respuesta . Solo estaba cuestionando la sabiduría de permitir desafíos múltiples en un único campo de encabezado, dada la extraña combinación de separadores que crea.

Algunos otros hilos de discusión de temas de actualidad & acción futura que pueda ser de interés:

Si tan solo ...
No es que tenga el estómago para ello, pero se podría excavar a través de la chromimum, Firefox & código de webkit para ver cómo esas comunidades han manejado el tema.

+1

Sí, parece que WinInet no maneja múltiples esquemas de autenticación en un solo encabezado. No me entusiasma, pero creo que podría ejecutar el servicio en múltiples endpoints, uno que solo admite Basic y uno que solo admite Negotiate, y haga que el cliente pruebe el que solo admite Negotiate primero, y si eso falla , cambie a Básico. – bpeikes

+0

Usar un recurso diferente para un tipo diferente de esquema de autenticación no me parece útil. Después de todo, desea codificar el encabezado en una respuesta '401 no autorizada', si el cliente intenta acceder a un recurso específico no autenticado. Además: el concepto de puntos finales muestra una falta de comprensión de la arquitectura REST HTTPs. En la web, preferimos tener puntos de entrada. – aef

Cuestiones relacionadas