Pregunta

Estoy tratando de implementar una funcionalidad de inicio de sesión "Remember Me" para un sitio ASP.NET MVC estoy construyendo. Estoy tratando de utilizar este enfoque http://jaspan.com/improved_persistent_login_cookie_best_practice (véase la parte superior cerca de 'Diseño de Miller' ) y tienen que trabajar hasta cierto punto.

Así, el flujo de trabajo es:

  1. usuario se conecta y se emite una cadena aleatoria + su ID de base de datos criptográficamente seguro como un cookie persistente (que dura aproximadamente 30 días). cadena segura se almacena en la base de datos junto a su registro de cuenta de usuario.
  2. El usuario más tarde regresa al sitio donde se presenta el navegador de cookies de inicio de sesión, el ID y la clave segura se busca en la base de datos y si se encuentra coincidencia, el usuario se autentica automáticamente.
  3. Una vez autenticado, se genera una nueva clave segura, almacenada en la base de datos y la nueva cookie emitida.

Tengo esta funcionando bien, sin embargo, no funciona muy bien si el usuario se conecta desde varios navegadores u ordenadores. Obviamente diferentes navegadores va a terminar con una clave segura diferente almacena como una cookie, por lo tanto el flujo de trabajo se convierte en:

  1. usuario se conecta desde el navegador A, se emite una clave segura como galletas, clave se almacena en la base de datos.
  2. usuario se conecta desde el navegador B, se emite una clave segura diferentes como cookie. Key también se almacena en la base de datos, pero sobrescribe la clave generada desde el navegador A.
  3. El usuario visita el sitio desde el navegador Una vez más, los regalos de cookies del navegador emitidas desde el paso 1. partidos pero ya no porque clave segura fue sustituido en el paso 2. así que el usuario tiene que conectarse de nuevo. se genera otra nueva clave y sobrescribe la clave emitida al navegador B.
  4. Usuarios visitas de navegador B de nuevo, la clave no coincide, tiene que conectarse de nuevo, etc, etc.

¿Cómo puedo solucionar esto? Qué necesito para almacenar y mantener varias claves en la base de datos? Estoy incluso ir sobre esto de la manera correcta? Me he dado cuenta de stackoverflow parece manejar esto y me recuerda de diferentes navegadores y ordenadores.

¿Fue útil?

Solución

A partir de la lectura del artículo se conectó, me parece como el diseño de Miller es para almacenar la cadena al azar y el nombre de usuario como un par en una tabla diferente a la facilidad de mesa. Mediante el uso de la cadena aleatoria como el índice, puede tener varias conexiones simultáneas desde el mismo usuario-nombre sin dejar de ser razonablemente bien protegidos contra el robo de sesiones.

La descripción indica que almacene la cadena aleatoria dentro de la facilidad de mesa, que sólo se permitiría un inicio de sesión en el momento.

Otros consejos

Se necesita un tercer elemento de la galleta, token de una 'serie'. Esto representará un evento de inicio de sesión. Cada vez que el usuario inicia sesión en el sistema, se crea una nueva serie, que no cambia hasta que se cierre de sesión, o login de nuevo. Todavía tiene su clave de ficha, es decir, garantizados, que se actualiza en cada petición.

Aquí hay algunos enlaces para ayudar con esta aplicación:

problemas de base de datos al permitir múltiples navegador persistente registro ins

La guía definitiva para la autenticación de sitio web basado en la forma

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top