Frage

Ich habe einen benutzerdefinierten Mitgliedschaftsanbieter für mein aktuelles ASP .NET-Projekt erstellen, um habe mit unserem Datenbank-Schema zu passen, und Probleme habe es die Konfiguration einen Benutzer zu sperren, wenn sie ihr Passwort falsch dreimal erhalten, wie von den Standard-Anbietern unterstützt wird.

Ist das etwas, ich brauche mich zu implementieren, oder sollte es von Natur aus unterstützt werden?

Ich habe keinen Code, der mit ihm (Mitglieder und keiner der Schnittstelle scheinen zu behandeln es speziell), aber wenn ich implementieren müssen es selbst, wie gehe ich über den Benutzer informiert, sie gesperrt sind aus speziell behandelt? Muss ich irgendeine Art von Ausnahme in ValidateUser erhöhen?

Lösung

Schade, dass ich nicht zwei Antworten markiert, die von Dave R ausgebrachten Links einem großen tiefen Einblick geben, wie die Mitgliedschaft funktioniert und was Zhaph wies darauf hin, waren genau das, was ich tun endete, die gesperrte Logik in den benutzerdefinierten Handhabung Mitgliedschaftsanbieter.

I behandeln dann den Fehlerzustand durch die Login-Kontrolle der LoginError Ereignis verwenden und dort überprüft, ob der Benutzer, um gesperrt wurde die entsprechende Fehlermeldung anzuzeigen.

War es hilfreich?

Lösung

Scott Mitchell hat eine ausgezeichnete Reihe von Tutorials auf der ASP.NET-Website geschrieben. Dieser Link enthält Informationen über einen speziellen Provider Erstellen und bespricht die Verriegelungslogik:

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

Es gibt auch keine in-integrierte Methode Konten zu entsperren (das heißt Sie haben dies durch Datenbank-Tools tun, wenn Sie etwas verwenden sind ähnlich dem SqlMembershipProvider). Scott hat auch einen Artikel über das Erstellen einer Benutzeroberfläche geschrieben, dies zu verwalten, die Sie hier finden:

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

Ich empfehle eigentlich die ganze Serie zu lesen. Scotts ein ausgezeichneter Kommunikator.

Ich hoffe, das hilft.

Andere Tipps

Das ist etwas, das Sie selbst schreiben würde.

Das Standard-Datenbankschema die folgenden Spalten in der aspnet_Membership Tabelle hat:

IsLockedOut
FailedPasswordAttemptCount
FailedPasswordAttemptWindowStart

Der Versuch Zählung wird auf jedem gescheiterten Versuch, im Versuch, Fenster erhöht werden, und die Zeit des ersten gescheiterten Versuchs wird im Fenster startet Spalte gespeichert, sobald FailedPasswordAttemptCount die MaxInvalidPasswordAttempts aus der Konfiguration entspricht, wird die IsLockedOut gesetzt.

Wie Michiel heißt es, Ihre ValidateUser Methode wird dann muß diese Werte überprüfen, auf der Grundlage der Einstellungen in der Konfiguration des Anbieters - standardmäßig ist dies:

maxInvalidPasswordAttempts="5"
passwordAttemptWindow="10"

Sobald der Benutzer die maximalen Anmeldeversuche gehabt hat, müssen Sie sicherstellen, dass Sie die MembershipUser.IsLockedOut gesetzt haben, ist von Ihrem Provider festgelegt - Sie können dann diesen Wert überprüfen und entsprechend verhalten - wenn Sie die Standard-Anmeldung verwenden Kontrollen, wird dieser Wert wahrscheinlich bereits für Sie überprüft werden.

die Bedingungen Replizieren, die (zu viele schlechte Anmeldeversuche) zu sperren, führen. Da Membership Provider eine Reise in ihre Backend jedes Mal macht, ist es sinnvoll, diesen Ansatz zu Anbietern mit angemessener Anzahl von MaxInvalidPasswordAttempts zu begrenzen.

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

In Ihrer benutzerdefinierten Mitgliedschaftsanbieter, sollten Sie die ValidateUser Funktion implementieren. Es überprüfen Sie nicht nur, wenn der Benutzername und das Passwort gültig sind, aber Sie haben auch die Anzahl der ungültigen Anmeldeversuche usw. von Ihrem Datenspeicher abrufen. Wenn der Benutzername / Passwort gültig ist, setzen Sie das Kennwort Versuch Zahl, otherelse den Versuch Zahl zu erhöhen. Die SqlMembershipProvider speichert auch die LastAttempt Datetime, so können Sie Art und Weise in nicht Brute-Force, weil Sie nicht innerhalb eines bestimmten Zeitrahmens zu versuchen, sind nicht erlaubt.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top