2010-03-05 14 views
68

¿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?

+0

Gran explicación de @Gumbo aquí: http://stackoverflow.com/a/5288679/591487 – inorganik

+2

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

+1

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

Respuesta

112

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:

  1. cliente realiza la solicitud
  2. cliente vuelve un nonce del servidor y una solicitud 401 de autenticación
  3. 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)
  4. 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)
  5. 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.
+0

Buena explicación. ¿Es el nombre de usuario y pwd para un usuario de Windows? ¿De dónde se generan? – SoftwareGeek

+0

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. –

+7

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. –

10

Se envía un hash de las credenciales por el cable.

HA1 = MD5(username:realm:password) 

Wikipedia has an excellent article on this topic

+0

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

+0

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. –

1

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.

+0

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) –

Cuestiones relacionadas