Frage

Ich versuche, eine „Remember Me“ Login-Funktionalität für eine ASP.NET MVC-Website zu implementieren Ich baue. Ich versuche, diesen Ansatz zu verwenden http://jaspan.com/improved_persistent_login_cookie_best_practice (siehe ‚Millers Design‘ in der Nähe von oben ) und hat es zu einem gewissen Grad zu arbeiten.

So ist der Work-Flow ist:

  1. Benutzer anmeldet und eine kryptografisch sichere Zufall string + ihre Datenbank-ID als dauerhaftes Cookie (Dauer: ca. 30 Tage) ausgegeben. Sichere String wird in der Datenbank gespeichert ist neben ihrem Benutzerkonto Rekord.
  2. User später kommt zurück zur Seite, wo Browser präsentiert den Login-Cookie, die ID und sichere Schlüssel wird in der Datenbank nachgeschlagen und wenn Übereinstimmung gefunden wird, wird der Benutzer automatisch authentifiziert.
  3. Sobald ein neuer Sicherheitsschlüssel-Authentifizierung erzeugt wird, in der Datenbank gespeichert und neue Cookie ausgegeben.

Ich habe diese Arbeit gut, aber ist es nicht sehr gut funktionieren, wenn sich der Benutzer anmeldet von mehreren Browsern oder Computern. Offensichtlich verschiedene Browser mit einem anderen sicheren Schlüsseln als Cookie gespeichert werden am Ende, so dass der Work-Flow wird:

  1. Benutzer anmeldet von Browser A, einen sicheren Schlüssel als Cookie ausgegeben wird, Schlüssel in der Datenbank gespeichert ist.
  2. Benutzer anmeldet von Browser-B ist ein anderen sicheren Schlüssel als Cookie ausgegeben. Key wird auch in der Datenbank gespeichert, sondern überschreibt die vom Browser A generierten Schlüssel.
  3. Benutzer Besuche Website von Browser A wieder, Browser präsentiert Plätzchen vom Schritt ausgegeben 1., aber es nicht mehr Streichhölzer, weil sichere Schlüssel in Schritt 2 ersetzt so Benutzer erneut anmelden muss. Ein weiterer neuer Schlüssel generiert und überschreibt den Schlüssel zum Browser B ausgegeben werden.
  4. Benutzer Besuche von Browser B wieder, Schlüssel nicht übereinstimmt, hat sich erneut anmelden usw. etc.

Wie kann ich dieses Problem lösen? Muss ich speichern und mehrere Schlüssel in der Datenbank zu pflegen? Bin ich werde auch dies über die richtige Art und Weise? Ich habe bemerkt, Stackoverflow, dies zu verwalten scheint und erinnert mich von verschiedenen Browsern und Computern.

War es hilfreich?

Lösung

Aus der Lektüre der Artikel, den Sie verbunden sind, scheint es mir, wie Millers Design, welches die zufällige Zeichenfolge und den Benutzernamen als ein Paar in einer anderen Tabelle als die Benutzer-Tabelle zu speichern ist. Durch die Verwendung der zufälligen Zeichenfolge als der Index, mehrere gleichzeitige Logins aus dem gleichen Benutzernamen haben, während noch einigermaßen von Session-Hijacking gut geschützt werden.

Ihre Beschreibung zeigt, dass Sie die zufällige Zeichenfolge innerhalb der Benutzer-Tabelle speichern, die nur einer Anmeldung zu der Zeit erlauben würden.

Andere Tipps

Sie benötigen ein drittes Element in Ihrem Cookie, eine ‚Serie‘ Token. Dies wird ein Anmeldeereignis darstellen. Jedesmal, sich der Benutzer in Ihr System, erstellt es eine neue Serie, die sich nicht ändert, bis sie sich abzumelden, oder Login wieder. Sie haben noch Ihren Token, dh Secured Schlüssel, die bei jeder Anfrage aktualisiert.

Hier einige Links zu Hilfe bei dieser Umsetzung:

Datenbank Probleme, wenn mehrere Browser-persistente Log ermöglicht In

Der definitive Leitfaden für formularbasierte Website-Authentifizierung

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