Token-basierte Authentifizierung in REST-APIs
Ich versucht zu implementieren, die eine token-basierte Authentifizierung Ansatz:
-
Jeder erfolgreichen login erstellt neue token.
-
Wenn der Benutzer wählt "halten Sie mich angemeldet" oder der Benutzer mit einem mobilen Gerät, wird der token beibehalten, in eine Redis-Datenbank ohne Ablaufdatum. Andernfalls wird das token verfällt in 20 Minuten.
-
Sobald der Benutzer authentifiziert ist, wird das token wird überprüft von jeder nachfolgenden Anfrage in meinem Redis-Datenbank.
Ich Frage mich, wie kann ich Geräte identifizieren. Im Fall von mobilen Geräten, ich kann mit einer Geräte-id. Aber wie erkenne ich einen browser?
Beispiel: Der Benutzer meldet sich an mit Chrome und wählt "halten Sie mich angemeldet". Wird ein token generiert und blieb mit dem browser-Namen in Redis. Wenn der Benutzer sich anmeldet, von Firefox, speichert das token und "Firefox" in der Datenbank. Ich Speichere die Tokens in Redis in der Erwägung, dass token wird erstellt, auf der erfolgreichen Authentifizierung. Ist es in Ordnung, um bestehen nur dem token und dem browser, in dem das token verwendet wird? Oder muss ich bestehen, die IP-Adresse gut?
Zusätzliche Frage: Wie kann man verhindern, Angreifer zu stehlen und die token von einem cookie?
- Zu verschließen, müssen Sie erkennen, welches Gerät geben Sie die Anfrage kommt? Du musst auf "authentifizieren" Sie den Gerätetyp?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Wie token-basierte Authentifizierung funktioniert
In ein paar Worte, ein Authentifizierungsschema auf Basis des tokens gehen Sie folgendermaßen vor:
Wie zum senden von Anmeldeinformationen an den server
In REST-Anwendungen, jede Anfrage vom client an den server enthält alle notwendigen Informationen werden vom server verstanden. Mit ihm, Sie sind nicht abhängig von irgendwelchen session-Kontext auf dem server gespeichert und Sie brechen nicht die stateless Einschränkung der REST-Architektur definiert, die von Roy T. Fielding in seiner dissertation:
Beim Zugriff auf geschützte Ressourcen, die eine Authentifizierung erfordern, jede Anfrage muss enthalten alle notwendigen Daten werden korrekt authentifiziert/autorisiert. Es bedeutet, dass die wird die Authentifizierung durchgeführt werden, für jede Anforderung.
Haben Sie einen Blick auf dieses Zitat von der RFC 7235 bezüglich der überlegungen zum neuen Authentifizierungsschemas:
- Und Authentifizierungsdaten (credentials) gehört zu den standard-HTTP -
Authorization
header. Aus der RFC 7235:Bitte beachten Sie, dass der name dieser HTTP-header ist sehr schade, denn es trägt Authentifizierung Daten statt Genehmigung. Sowieso, das ist der standard-header für das senden Anmeldeinformationen.
Beim durchführen eines token-basierte Authentifizierung Token sind Ihre Anmeldeinformationen. In diesem Ansatz, Ihre hard-Anmeldeinformationen (Benutzername und Kennwort) ausgetauscht werden, um ein token gesendet wird in jedem Antrag.
Was ein token sieht wie
Einen Authentifizierungs-token ist ein Stück der Daten, generiert durch den server identifiziert, die ein Nutzer. Grundsätzlich tokens können undurchsichtig (die zeigt keine details, die anderen als Wert an sich, wie ein zufällige Zeichenfolge) oder eigenständige (wie JSON Web Token):
Zufällige Zeichenfolge: Ein token ausgestellt werden kann durch die Generierung einer zufälligen Zeichenfolge und verharren Sie in einer Datenbank mit einem Ablaufdatum und mit einer Benutzer-id zugeordnet sein.
JSON Web Token (JWT): Definiert durch die RFC-7519, es ist eine standard-Methode für die Forderungen sicher zwischen zwei Parteien. JWT ist eine eigenständige token und ermöglicht Ihnen das speichern einer Benutzer-id, ein Ablaufdatum und, was Sie wollen (aber nicht speichern Passwörter) in einem payload, die eine JSON codiert, wie Base64. Die Nutzlast kann gelesen werden, indem der client und der Integrität des token können Sie leicht überprüfen, indem überprüfen der Signatur auf dem server. Sie nicht brauchen, um zu bestehen JWT Token, wenn Sie nicht brauchen, Sie zu verfolgen. Obwohl, durch speichern des tokens, haben Sie die Möglichkeit von Annullierung und Widerruf der Zugriff von Ihnen. Die Spur halten der JWT tokens, statt, die das fortbestehen der ganzen token, Sie kann bestehen bleiben, die token-id (die
jti
Anspruch) und einige Metadaten (die Nutzer eine auf Sie ausgestellte token für das Ablaufdatum, etc), wenn Sie brauchen. Finden Sie einige große Ressourcen für die Arbeit mit JWT haben Sie einen Blick auf http://jwt.io.Tipp: Immer Bedenken das entfernen von alten Token, um zu verhindern, dass Ihre Datenbank wächst auf unbestimmte Zeit.
, Wie zu akzeptieren, die ein token
Sollten Sie nie akzeptieren abgelaufene Token oder Token, die wurden nicht ausgegeben, die von Ihrer Anwendung. Wenn Sie JWT, müssen Sie die token-Signatur.
Bitte beachten Sie, sobald Sie die Ausgabe einer token und geben es an Ihre Kunden, die Sie haben keine Kontrolle über das, was der Kunde tun wird mit dem token. Keine Kontrolle. Ernst.
Es ist eine gängige Praxis, um zu überprüfen, die
User-Agent
- header-Feld zu sagen, welcher browser verwendet wird, um den Zugriff auf Ihre API. Jedoch, es lohnt sich zu erwähnen, dass die HTTP-Header können leicht gefälscht und Sie sollten nie das Vertrauen Ihrer Kunden. Browser haben keine eindeutige id, sondern Sie bekommen können ein gutes Niveau der fingerprinting, wenn Sie wollen.Ich weiß nicht, über Ihre Anforderungen an die Sicherheit, aber Sie können versuchen, die folgenden in Ihren server zur Verbesserung der Sicherheit Ihres API:
Beim versenden von sensiblen Daten über den Draht, Ihre beste Freundin ist HTTPS und es schützt Ihre Anwendung gegen die man-in-the-middle-Angriff.
By the way, habe ich erwähnt, sollten Sie nie das Vertrauen Ihrer Kunden?
Einmal server empfängt die Anforderung vom client, es enthält das "User-Agent". Dieses Attribut wird uns helfen, zu identifizieren, die dem client.
Entnehmen Sie bitte diesem link: Wie kann ich erkennen, welche browser verwendet wird, um Zugriff auf meine Website?