¿Cómo se determina si un servicio web REST está utilizando Basic, Kerberos, NTLM o uno de los muchos otros métodos de autenticación?determinando los métodos de autenticación HTTP http
Respuesta
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.
Si se trata de un escenario de caja negra, normalmente me conecto con Fiddler e inspecciono el tráfico real.
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 ;-).
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
@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 ... :-( –
- 1. caché de autenticación HTTP
- 2. jQuery autenticación HTTP
- 3. Autenticación HTTP condicional básica
- 4. Autenticación HTTP en J2ME
- 5. Spring Security HTTP Basic Autenticación
- 6. HTTP de autenticación de iPhone
- 7. Enviando encabezados HTTP con HTTP Web Request para autenticación NTLM
- 8. Solicitudes HTTP con autenticación básica
- 9. Autenticación HTTP digest con HttpUrlConnection
- 10. HTTP MAC Autenticación usando C#
- 11. Autenticación HTTP básica, usando python
- 12. EventSource y autenticación http básica
- 13. Objetivo-c autenticación básica HTTP
- 14. ¿Cómo manejar la autenticación HTTP usando HttpURLConnection?
- 15. Servidor HTTP detrás de IIS: pase los encabezados de autenticación
- 16. beneficios de "Autenticación HTTP con PHP"
- 17. Autenticación HTTP - encabezado WWW-Authenticate - múltiples reinos
- 18. RCurl: Autenticación HTTP cuando el sitio responde con código HTTP 401 sin autenticación WWW
- 19. Ajax: autenticación básica de HTTP y cookie de autenticación
- 20. Autenticación implícita en solicitudes HTTP de clojure (?)
- 21. HTTP de autenticación básica para Carpincho
- 22. Autenticación HTTP básica para un servidor Jetty
- 23. Código JavaScript puro para autenticación básica HTTP?
- 24. XmlSlurper.parse (uri) con autenticación básica HTTP
- 25. ¿Puedo usar Autenticación básica HTTP con Django?
- 26. Autenticación HTTP Proxy en iOS 4.3
- 27. Python urllib2, autenticación HTTP básica y tr.im
- 28. ¿Puedo usar NSURLCredentialStorage para autenticación básica HTTP?
- 29. Autenticación HTTP básica en el iPhone
- 30. PhoneGap FileTransfer con autenticación básica HTTP
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
Solo necesito 1 centavo por cada sitio web que lo hace (no maneja Basic con el desafío correcto) y puedo retirarme ... –