2009-08-22 32 views
14

Estoy usando el SqlMembershipProvider estándar que viene con la demo ASP.NET MVC.¿Cómo debo implementar "Olvidé mi contraseña" en ASP.NET MVC?

Estoy interesado en implementar un enlace "Olvidé mi contraseña" en mi sitio.

¿Cuál es la forma correcta de implementar esta característica? ¿Debo sobrescribir la contraseña con una temporal y enviarla por correo electrónico a su correo electrónico registrado?

Respuesta

8

El proveedor hará automáticamente el reajuste para usted:

http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.resetpassword.aspx

La muestra sólo devuelve la nueva contraseña en el navegador en lugar de enviar por correo electrónico al usuario sino que utiliza el secreto de pregunta/respuesta que se puede configurar con el proveedor.

Esta muestra se pone la contraseña y mensajes de correo electrónico que:

http://msdn.microsoft.com/en-us/library/system.web.security.sqlmembershipprovider.getpassword.aspx

Creo que cualquiera de estos enfoques es seguro. El correo electrónico paso es un poco más seguro ya que el usuario tendrá que saber la pregunta/respuesta y la contraseña del correo electrónico para hackear una cuenta.

Me doy cuenta de que estas muestras no están utilizando MVC, pero estoy seguro de que es suficiente para ponerlo en funcionamiento. :)

10

Sobre la base de la naturaleza de la aplicación, la mejor práctica para la contraseña debe ser olvidado en el siguiente orden

  1. Permitir al usuario verificar la Secreto/Pregunta por un máximo de 3 a 5 intentos
  2. En la validación exitosa, envíe un correo electrónico con contraseña generada al azar con una validez de 24 horas.
  3. El correo electrónico debe contener solo la contraseña pero no ambos nombre de usuario/contraseña.
  4. Cuando el usuario inicia sesión con una contraseña temporal, el usuario debe ser forzado a crear una nueva contraseña antes de ir a la página de inicio.
6

Seguramente es mejor enviar al usuario un enlace con un tipo de URL imposible de adivinar (digamos que contiene un Guid al azar. Cuando el usuario hace clic en la URL, puede restablecer la contraseña. La URL debe ser buena para un solo uso, y debe expirar después de un tiempo determinado.

5

él depende de qué tipo de proveedor de pertenencia que está utilizando. Pero voy a recomendar el uso de proveedor de pertenencia simple para la autenticación para obtener más detalles please visit the following link

Aquí es algún código para usted

[HttpPost] 
[AllowAnonymous] 
public ActionResult ForgotPassword(ForgotPasswordModel model) 
    { 
     . 
     . 
     . 
     . 
       if (WebSecurity.UserExists(model.UserName)) 
       { 
       var token = WebSecurity.GeneratePasswordResetToken(model.UserName, 60); 
        . 
        . 
        . 
        .       
        // send this token by email 
       } 
       else 
       { 
        ModelState.AddModelError("", "Could not find User"); 
       } 
      } 
     return View(model); 


    } 

[HttpPost] 
    public ActionResult ResetPassword(ResetPasswordModel model) 
    { 
     string token = Request.Params["token"]; 
     if (!string.IsNullOrEmpty(token)) 
     { 
      if (WebSecurity.ResetPassword(token, model.NewPassword)) 
      { 
     // send email…….. or           
       return View(); 
      } 
     } 
Cuestiones relacionadas