2009-01-09 16 views
10

¿Es posible controlar el formato de la contraseña que se genera automáticamente mediante una llamada a MembershipUser.ResetPassword()?¿Cómo puedo controlar el formato MembershipUser.ResetPassword()

Quiero permitir o no permitir ciertos caracteres especiales en la contraseña generada.

Estoy utilizando el SqlMembershipProvider con un formato de contraseña de Hashed.

Gracias.

+0

¿Por qué desea limitar caracteres especiales? No hay casi ninguna razón defendible para esto y es muy desagradable para el usuario. –

+1

@John Sheehan: Por otro lado, he tenido quejas de los usuarios de que la contraseña generada contiene caracteres que son "difíciles de encontrar". Intente decirle a un usuario (no programador) que encuentre el | o ~ teclas en el teclado. Eliminar los caracteres difíciles de escribir se puede considerar un movimiento fácil de usar. Por supuesto, puede decirle al usuario que copie y pegue la contraseña, pero también he encontrado resistencia con eso. –

+0

Puede generar contraseñas fáciles de usar que sean seguras, pero no debe limitar lo que las personas pueden usar. –

Respuesta

1

Echa un vistazo a este artículo - Changing the autogenerated password format in the SqlMembershipProvider.

me ocurrió una forma rápida de cortar el SqlMembershipProvider para generar contraseñas menos complejas, y que era tan simple como crear una nueva clase de proveedor que hereda de SqlMembershipProvider, a continuación, reemplazando el método GeneratePassword.

Esto no es una solución totalmente resuelta, pero podría ayudar.

0

Tenía la esperanza de que hubiera alguna configuración de configuración que podría usarse, pero anular el método GeneratePassword() funciona para mi situación.

Ya teníamos una clase de utilidad crypto que generaría las cadenas de contraseñas aleatorias, por lo que fue un cambio bastante rápido.

19

Es posible que desee hacer esto en dos pasos, como se identifica por Mark Fitzpatrick aquí: http://bytes.com/groups/net-asp/689452-how-reset-users-password-without-having-use-passwordrecovery#post2740740

Primera restablecer la contraseña, entonces inmediatamente el cambio a un formato de su gusto. Obviamente, NO se recomienda usar una cadena fija como en el ejemplo de Mark; querría implementar some random string generator.

user.ChangePassword(user.ResetPassword(), MyMethodToGenerateRandomPassword()); 
+1

Me gusta su solución. Probé la solución de David HAust, pero cuando llamo MembershipUser.ResetPassword(), todavía me daría las contraseñas de megacriptografía. – sshow

+3

+1: esta debería ser la respuesta. – naveen

2

Hoy en día también se puede utilizar el método Membership.GeneratePassword y aprobar un MinRequiredPasswordLength o utilizar la propiedad ya definido en Web.config como esto:

var newPassword = 
        // 0 = Number of non alphanumeric characters 
        Membership.GeneratePassword(Membership.MinRequiredPasswordLength, 0); 

    user.ChangePassword(user.ResetPassword(), newPassword); 
Cuestiones relacionadas