Pregunta

He tenido que crear un proveedor de pertenencia personalizada para mi actual ASP .Proyecto de red con el fin de encajar con nuestro esquema de base de datos, y estoy teniendo problemas para configurar el bloqueo de un usuario si tienen su contraseña incorrecta tres veces, como es soportado por el estándar de los proveedores.

Es esto algo que se necesita para aplicar a mí mismo, o debería ser apoyada inherentemente?

Yo no tengo ningún código que trata específicamente con él (y ninguno de los miembros de la interfaz parecen ocuparse específicamente), pero si tengo que aplicar yo mismo, ¿cómo ir sobre la manera de informar al usuario de que se bloquee?Qué necesito para plantear algún tipo de excepción en ValidateUser?

Solución

Lástima que no se puede marcar dos respuestas, los enlaces proporcionados por Dave R dar una gran mirada en profundidad en cómo pertenencia funciona, y lo que Zhaph señaló fue justo lo que terminó haciendo, el manejo de las bloqueado fuera de la lógica en el proveedor de pertenencia personalizada.

Yo gestiona la condición de error mediante el inicio de Sesión de control del LoginError evento y comprobar para ver si el usuario fue bloqueado con el fin de mostrar el mensaje de error apropiado.

¿Fue útil?

Solución

Scott Mitchell ha escrito una excelente serie de tutoriales en el sitio ASP.NET. Este enlace incluye información sobre cómo crear un proveedor personalizado y se analiza la lógica de bloqueo:

http://www.asp.net/LEARN/security/ tutorial-06-cs.aspx

También hay ningún método incorporado para desbloquear las cuentas (es decir que tiene que hacer esto a través de herramientas de base de datos si está usando algo similar a la SqlMembershipProvider). Scott también ha escrito un artículo sobre la creación de una interfaz de usuario para gestionar esto, que se puede encontrar aquí:

http://www.asp.net/LEARN/security/ tutorial-14-vb.aspx

En realidad, recomiendo la lectura de toda la serie. un excelente comunicador de Scott.

Espero que esto ayude.

Otros consejos

Esto es algo que tendrías que escribir.

El valor predeterminado esquema de base de datos tiene las siguientes columnas en el aspnet_Membership tabla:

IsLockedOut
FailedPasswordAttemptCount
FailedPasswordAttemptWindowStart

El intento de conteo se incrementa en cada intento fracasado en el intento de ventana, y el tiempo del primer intento fallido se almacena en el inicio de la ventana de la columna, una vez FailedPasswordAttemptCount es igual a la maxInvalidPasswordAttempts de la configuración, el IsLockedOut se establece.

Como Michiel de los estados, su método de ValidateUser que se necesita para comprobar estos valores en función de los ajustes en la configuración del proveedor por defecto, estos son:

maxInvalidPasswordAttempts="5"
passwordAttemptWindow="10"

Una vez que el usuario ha tenido el máximo de intentos de inicio de sesión, usted necesita para asegurarse de que ha configurado el MembershipUser.IsLockedOut se establece a partir de su proveedor - a continuación, puede comprobar que el valor y comportarse adecuadamente - si usted está utilizando el valor predeterminado controles de inicio de Sesión, este valor probablemente ya ser comprobado para usted.

Replicar las condiciones que conducen al bloqueo (demasiados intentos de conexión malos). Debido a que los proveedores de pertenencia hacer un viaje a su backend cada vez, es sensato limitar este enfoque a los proveedores con número razonable de MaxInvalidPasswordAttempts.

if (0 < Membership.MaxInvalidPasswordAttempts && Membership.MaxInvalidPasswordAttempts < 100)
       {
                for(int i = 0; i <= Membership.MaxInvalidPasswordAttempts; i++)
                {
                    Membership.ValidateUser(userName, "jfdlsjflksjlkfjsdlkfjsdl");
                }
        }

En su proveedor de pertenencia personalizada, debe implementar la función ValidateUser. Allí no sólo comprueba si el nombre de usuario y la contraseña son válidos, pero también recuperar el número de intentos fallidos de contraseña, etc desde su almacén de datos. Si el nombre de usuario / contraseña es válida, restablecer el recuento intento contraseña, otherelse aumentar el número de intento. El SqlMembershipProvider también almacena la fecha y hora LastAttempt, por lo que no se puede ataque de fuerza bruta en forma, ya que no está permitido intentar dentro de un cierto período de tiempo.

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