2013-09-22 17 views
5

Ich versuche, hier skizzierte eine „remember me“ Dienstprogramm, das System zu implementieren: Improved persistent login cookieImplementierung erinnere mich mit Token und Serien über mehrere Geräte hinweg

es ein Problem ist hier mit der Logik aber für mich und frage mich, ob Jeder kann das für mich klären.

  • Ein Benutzer erhält eine Sitzungs-ID. Dies ist eine zufällig generierte Zeichenfolge und ist persistent über die Lebensdauer des Benutzerkontos.

  • Ein Benutzer erhält eine Token-ID. Dies ist eine zufällig generierte Zeichenfolge und wird jedes Mal, wenn der Benutzer erfolgreich anmeldet neu erstellt.

Beiden Werte werden als signierte Cookies auf dem Computer des Benutzers und in der Datenbank gespeichert.

Die Idee ist, dass, wenn es jemand schafft, das Token und die Serie des Benutzers zu fälschen und sich als der Benutzer anmeldet, dann werden sie eine neue Token-ID erzeugen. Wenn der legitime Benutzer das nächste Mal versucht, sich anzumelden, wird ihm eine übereinstimmende Reihe, aber ein ungültiges Token mitgeteilt, wodurch dem System mitgeteilt wird, dass eine Sicherheitsverletzung stattgefunden hat und alle erforderlichen Maßnahmen ergriffen werden können (Löschen des Token des Benutzers).

Das ist großartig. Was passiert jedoch, wenn ein Benutzer versucht, meine Anwendung von mehreren Geräten oder Browsern zu verwenden? Angenommen, ein Nutzer meldet sich mit Chrome bei meinem Dienst an und erinnert sich an mich. Beim nächsten Login loggen sie sich über Firefox ein und wählen mich auch erinnern. Es wurde ein neues Token generiert, sodass beim nächsten Versuch des Benutzers, sich mit Chrome anzumelden, ein falscher Diebstahl ausgelöst wird - nein?

Wenn dies der Fall ist, wie kann ich diese Lösung zuverlässiger implementieren? Mir ist durchaus bewusst, dass die cookie-basierte Autorisierung von Natur aus weniger sicher ist und es einem cookie-autorisierten Nutzer nicht erlauben würde, schädliche Aktionen wie Käufe durchzuführen.

Antwort

4

Die ursprüngliche Post, die die „Verbesserte persistent Login Cookie“ bezeichnet, (gefunden hier: http://fishbowl.pastiche.org/2004/01/19/persistent_login_cookie_best_practice/) heißt es:

Das Cookie von einigen der Benutzername des Benutzers, gefolgt von einem Trennzeichen, gefolgt bestehen sollte große Zufallszahl (128 Bits scheint unglaublich groß genug, um akzeptabel zu sein). Der Server hält eine Tabelle von Nummern-> Benutzernamen-Zuordnungen, die zur Überprüfung der Gültigkeit des Cookies nachgeschlagen werden. Wenn der Cookie eine zufällige Nummer und Benutzernamen enthält, die in der Tabelle einander zugeordnet sind, wird die Anmeldung akzeptiert.

Zu jeder Zeit kann ein Benutzername

Also mehrere solcher Zahlen abgebildet werden, kann der Benutzer die gleichzeitig viele persistente Token haben.

+1

Danke, das macht jetzt Sinn. Ich werde eine Menge Tokens haben und ihnen einen 30-Tage-Ablauf bei Nichtbenutzung geben, damit ich die Datenbank nicht mit redundanten Daten befülle. –