2010-08-11 13 views

Respuesta

8

Cuando se envía una solicitud no autenticado el servicio tiene que responder con un "HTTP/1.1 401 no autorizado" y la respuesta contiene una cabecera WWW-Authenticate que especifica lo que se espera esquema de autenticación (Basic, Digest), el reino de seguridad y cualquier otro valor específico (como el nonce de Digets). Entonces, si el servidor responde con:

HTTP/1.0 401 Unauthorized 
WWW-Authenticate: Digest realm="example.com", 
         qop="auth,auth-int", 
         nonce="...", 
         opaque="..." 

quiere una autenticación implícita. Si la respuesta se ve así:

HTTP/1.0 401 Unauthorized 
WWW-Authenticate: Basic realm="example.com" 

, entonces quiere una autenticación básica. Algunos servidores/sitios (pobremente implementados) no manejan el Basic correctamente y responden directamente con 403 Forbidden en lugar de desafiar primero.

NTLM es similar en cuanto a que el servidor responde con un encabezado 401 y un encabezado WWW-Authenticate con el valor NTLM, pero no hay ninguna especificación pública oficial, ya que es propiedad de Microsoft. Hay varias descripciones de reverseengineered.

Desafortunadamente REST no viene con una descripción de servicio de estilo WSDL para descubrir el esquema de autenticación utilizado a priori.

+0

el problema era que el servicio REST no regresaba con ningún encabezado WWW-Authenticate en absoluto en el 401, así que tuve que especificar manualmente el encabezado – Seph

+1

Solo necesito 1 centavo por cada sitio web que lo hace (no maneja Basic con el desafío correcto) y puedo retirarme ... –

1

Si se trata de un escenario de caja negra, normalmente me conecto con Fiddler e inspecciono el tráfico real.

4

Envíelo una solicitud, presumiblemente obtenga un código HTTP 401, y mire el encabezado WWW-Authenticate que (por RFC 2616) incluye la respuesta MUST. Si en cambio obtienes un 403 o algún otro estado extraño, o un encabezado WWW-Authenticate faltante, maldices a los autores del sitio web que no siguen el núcleo del RFC HTTP y comienzas a olfatear el tráfico para intentar realizar una ingeniería inversa del desorden no estándar que han cometido este vez ;-).

+0

Ojalá pudiera seleccionar dos respuestas válidas, el problema era que el servicio REST no devolvía un encabezado WWW-Authenticate, así que tuve que agregar manualmente el encabezado con código de: http://devproj20.blogspot.com/ 2008/02/assigning-basic-authorization-http.html – Seph

+0

@Seph, sí, la cantidad de sitios rotos en la web es asombrosa, ¿no? No importa qué tan claro sea un RFC (y no se aclare mucho más que 'DEBE' ;-) siempre hay un montón de "programadores" (HA!) Que piensan que son demasiado especiales para leer, o que deben cumplirlos. , aburrido documentos ... :-( –

Cuestiones relacionadas