2014-05-13 5 views
5

Ich erstelle eine AngularJS-Anwendung, die mit einer API interagiert, die Authentifizierungstoken zur Authentifizierung von Benutzern verwendet. Alles scheint gut zu funktionieren, aber ich kämpfe mit einer Möglichkeit, das Authentifizierungs-Token zwischen den Anfragen ordnungsgemäß zu speichern.Persistierendes Authentifizierungs-Token in AngularJS

Im Moment, wenn sich ein Benutzer mit korrekten Anmeldeinformationen anmeldet, wird authToken zurückgegeben, und ich setze das auf $rootScope.authToken. Ich sende auch dieses Auth-Token für zukünftige Anfragen, aber wenn ich ein Hard Reload neu lade, wird die Webseite mit F5 $rootScope gelöscht und ich muss mich erneut authentifizieren.

Ich bin mir bewusst, dass ich den authToken in einem Cookie speichern kann, aber wäre das der sicherste Weg? Ist es besser, den lokalen Speicher zum Speichern des Tokens zu verwenden? Wenn lokaler Speicher verwendet wird, würde dies nicht gelöscht werden, wenn der Benutzer seinen Browser neu startet? Ich würde es am liebsten mögen, wenn der Login für ein paar Tage bestehen bleibt.

Antwort

1

Erstens, ich bin nicht sicher, was das Format Ihrer authToken ist aber localStorage nicht für irgendwelchen sensible Daten verwendet werden soll. Die Verwendung von localStorage funktioniert gut (und überlebt Browser-Neustarts), solange Ihre authToken relativ manipulationssicher ist entweder durch eine Form der Verschlüsselung oder nonce.

Im Wesentlichen sollten Sie darauf achten, dass der Wert für alle clientseitigen Benutzer "sichtbar" ist und daher angenommen werden kann, dass er geändert oder inkrementiert werden kann.

Haben Sie über den Widerruf von Anmeldesitzungen nachgedacht? Zum Beispiel, wenn Sie alle aktive Sitzungen Ihrer Anwendung abmelden möchten, wie würden Sie es tun? Da die authToken clientseitig gespeichert ist, müssen Sie möglicherweise einen Zeitstempel (oder einen anderen eindeutigen Wert) hinzufügen, der serverseitig überprüft werden kann.

+0

In diesem Fall wäre es akzeptabel, das Login-Token auf der Serverseite zu verschlüsseln, bevor es an den Benutzer gesendet wird, so dass sie die verschlüsselte Version speichern? Wenn das Token dann an den Server gesendet wird, wird es entschlüsselt und geprüft, um sicherzustellen, dass es gültig ist usw. Es ist kein Problem, alle Benutzersitzungen zu widerrufen, sie werden in einer Tabelle gespeichert und jede Clientanforderung wird mit ihnen abgeglichen. Wenn ich die Tabelle lösche, wird jeder ausgeloggt :) –

+0

Ja, verschlüsseln Sie es serverseitig und überprüfen Sie es bei jeder API-Anfrage, die der Server empfängt. Das ist das Modell, das am sichersten als grundlegendes Sicherheitstor verwendet wird. Es gibt immer noch ein paar Probleme mit diesem Ansatz und ich würde empfehlen, zusätzlich zu Ihrem 'authToken'-Wert ein CSRF-Token zu setzen. AngularJS unterstützt dieses sekundäre Token nativ und dies wird Ihrer Anwendung eine weitere Barriere hinzufügen. Schauen Sie sich die Dokumente auf XSRF hier an: https://docs.angularjs.org/api/ng/service/$http –

+0

Ehrfürchtig, danke. –