¿En qué se diferencia la Autenticación implícita de la Autenticación básica que no sea el envío de credenciales como texto sin formato?¿Qué es la autenticación resumida?
Respuesta
La principal diferencia es que no requiere el envío del nombre de usuario y contraseña a través del cable en texto plano. También es inmune a los ataques de repetición, ya que utiliza un número único del servidor.
El servidor le da al cliente un número de uso único (un nonce) que combina con el nombre de usuario, el dominio, la contraseña y la solicitud de URI. El cliente ejecuta todos esos campos a través de un método de hash MD5 para generar una clave hash.
Envía esta clave hash al servidor junto con el nombre de usuario y el reino para intentar autenticarse.
En el lado del servidor se usa el mismo método para generar un hashkey, solo que en lugar de usar la contraseña introducida en el navegador, el servidor busca la contraseña esperada para el usuario desde su base de datos de usuario. Busca la contraseña almacenada para este nombre de usuario, se ejecuta a través del mismo algoritmo y lo compara con lo que el cliente envió. Si coinciden, se otorga el acceso, de lo contrario puede enviar un 401 no autorizado (sin inicio de sesión o un inicio de sesión fallido) o un 403 prohibido (acceso denegado).
La autenticación implícita es standardized in RFC2617. Hay una nice overview of it on Wikipedia:
Se puede pensar en ello como esto:
- cliente realiza la solicitud
- cliente vuelve un nonce del servidor y una solicitud 401 de autenticación
- cliente devuelve la siguiente respuesta array (username, kingdom, generate_md5_key (nonce, username, kingdom, URI, password_given_by_user_to_browser)) (sí, eso está muy simplificado)
- El servidor toma nombre de usuario y dominio (además de que conoce el URI que el cliente está solicitando) y loo ks la contraseña de ese nombre de usuario. Luego va y hace su propia versión de generate_md5_key (nonce, username, realm, URI, password_I_have_for_this_user_in_my_db)
- Compara la salida de generate_md5() que obtuvo con la enviada por el cliente, si coinciden con el cliente enviado el correcto contraseña. Si no coinciden, la contraseña enviada fue incorrecta.
Buena explicación. ¿Es el nombre de usuario y pwd para un usuario de Windows? ¿De dónde se generan? – SoftwareGeek
Son lo que el usuario escriba en el navegador. La contraseña debe coincidir con lo que el servidor haya almacenado para la contraseña de ese usuario. Lo más probable es que sea algo específico de esa aplicación web y no su contraseña de Windows. Depende mucho de la forma en que se configure la aplicación web. –
Esta respuesta tiene 6 años, pero creo que todos los sistemas de seguridad almacenan las contraseñas en un formato de hash salado. No existe ningún método para obtener la contraseña original de la base de datos, por lo que no es posible realizar la autorización de resumen. –
Se envía un hash de las credenciales por el cable.
HA1 = MD5(username:realm:password)
de cliente a servidor?¿Podrían dar los pasos para la interacción? El artículo de Wikipedia es bueno, pero necesito una mejor explicación o ejemplo. – SoftwareGeek
Sí, el cliente genera el valor hash y lo envía al servidor. El artículo de Wikipedia describe el protocolo en detalle, le sugiero que haga referencia a eso para obtener más información. –
La única forma de obtener el hash HA1 de las credenciales es conocer la contraseña. El servidor conoce HA1 pero no la contraseña que lo generó. Si un atacante conocía HA1, podría ingresar al sistema. Entonces no se envía por el cable. Antes de hacer esto, se realiza un hash adicional basado en nonce, etc., y esto debe coincidir con un cálculo similar realizado en el servidor. Por lo tanto, siempre que el servidor mantenga HA1 privado, el sistema es seguro.
Esta es la explicación para la autenticación implícita, donde la contraseña no se envía en texto plano (que es el caso de la autenticación básica) –
- 1. ¿Aún necesita usar la autenticación resumida si tiene SSL?
- 2. ¿Cómo puedo hacer la autenticación resumida con HttpWebRequest?
- 3. ¿Qué es la autenticación basada en token?
- 4. ¿Es posible utilizar la autenticación implícita con una solicitud XMLHTTP?
- 5. ¿Qué solución es mejor para la autenticación social de Django?
- 6. ¿Qué tan segura es la autenticación en el protocolo mysql?
- 7. ¿Cuál es la diferencia: Autenticación de Windows, Autenticación de pasaportes y Autenticación de formularios?
- 8. ¿Cuál es la diferencia entre la autenticación del servidor SQL y la autenticación de Windows?
- 9. Autenticación implícita en Devise
- 10. ¿Qué es la cookie ASPXAUTH?
- 11. Git a través de la autenticación del proxy de resumen
- 12. Autenticación BlazeDS
- 13. ¿Por qué la interfaz de usuario de autenticación HTTP es tan pobre en los navegadores?
- 14. ¿Qué tan segura es la autenticación de formularios básicos en asp.net?
- 15. ¿Por qué la autenticación AJAX a través de HTTP no es segura?
- 16. ¿Qué es la "autenticación de paso a través" en IIS 7?
- 17. ¿Qué debo usar para la autenticación de usuario en PHP?
- 18. ¿Por qué onAuthorization se ejecuta antes de la autenticación?
- 19. ¿Qué es la suplantación en ASP.net
- 20. Mutual SSL: ¿cuánta autenticación es suficiente?
- 21. Autenticación implícita en solicitudes HTTP de clojure (?)
- 22. servidor de autenticación LDAP ¿por qué?
- 23. ¿Es posible transferir la autenticación de Webbrowser a WebRequest
- 24. CORS con Internet Explorer: ¿es compatible con la autenticación básica?
- 25. ¿Es posible utilizar la autenticación dual con symfony2?
- 26. ¿La autenticación básica con SSL es lo suficientemente segura?
- 27. Javascript digest autenticación manual
- 28. Apache HttpClient autenticación implícita
- 29. ¿Qué es la inanición?
- 30. ¿Qué es la metaprogramación?
Gran explicación de @Gumbo aquí: http://stackoverflow.com/a/5288679/591487 – inorganik
Algo que NUNCA DEBES usar. No protege la contraseña en tránsito y requiere que el servidor almacene las contraseñas sin restricciones. – CodesInChaos
Digest proporciona una mejor seguridad en tránsito que la autenticación básica para el tráfico _unencrypted_, pero es débil. Es MUCHO más seguro usar la autenticación básica en combinación con SSL/TLS, porque de esa manera también puede mantener las contraseñas en el servidor cifradas. – rustyx