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.
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. –