2015-07-30 11 views
9

Ich habe die Fragen durchgesehen, aber ich habe nichts gefunden, was meine Zweifel lösen könnte. Ich habe umfangreiche Informationen über JWT gefunden, aber nicht viel, wenn ich die Vorteile vergleichen würde, die JWT gegenüber dem Generieren eines benutzerdefinierten Tokens für Authentifizierungsanforderungen gegenüber REST-Diensten bieten könnte.JWT (Json web token) Vs Benutzerdefiniertes Token

Welchen Vorteil hat die Verwendung eines JWT (Json Web Token) gegenüber dem Generieren eines benutzerdefinierten generierenden Tokens? Um das benutzerdefinierte Token zu generieren, könnte ich eine Hash-Strategie oder einen eindeutigen Zufallsgenerator verwenden.

Wenn ich ein benutzerdefiniertes Token generiere, könnte ich irgendwelche Sicherheitsbedenken haben? Würden Sie einen anderen Authentifizierungsmechanismus empfehlen?

Danke!

+0

Hallo Deibys, ich habe die gleiche Frage, hast du eine überzeugende Antwort gefunden, und welchen Ansatz hast du schließlich angewandt? Danke –

Antwort

8

JWT tokens enthalten Ansprüche, die Aussagen zum Thema sind (zum Beispiel der eingeloggte Benutzer). Diese Anweisungen können Dinge wie Name, E-Mail, Rollen usw. sein. JWT-Token sind digital signiert und nicht anfällig für CSRF Angriffe.

Diese beiden Merkmale stellen sicher, dass der Dienst, der das Token erhält, nicht zum ausstellenden Authentifizierungsserver zurückkehren muss, um die Gültigkeit des Tokens zu überprüfen oder Informationen über das Subjekt zu erhalten.

Dies erhöht die Fähigkeit eines Systems, das JWT-Token verwendet, in signifikanter Weise zu skalieren. JWT-Tokens benötigen einen sicheren Transportkanal (HTTPS).

Der Nachteil davon ist, dass Tokens nicht widerrufen werden können (da es keinen zentralen Server gibt, der über diese Token wacht). Aus diesem Grund haben Tokens typischerweise eine kurze Lebensdauer.

Token, die eine session id auf der anderen Seite halten, müssen den Authentifizierungsserver kontaktieren, um das Token zu validieren (normalerweise Datenbanksuche) und Informationen zum Thema abzurufen (eine andere Datenbanksuche).

Die Validierung von HMAC tokens erfordert die Kenntnis des geheimen Schlüssels, der zum Generieren des Tokens verwendet wird. In der Regel muss der empfangende Dienst (Ihre API) den Authentifizierungsserver kontaktieren, da der Server dort ist, wo das Geheimnis aufbewahrt wird.

HMAC-Tokens und Sitzungs-IDs werden normalerweise in Cookies gespeichert. Cookies können nicht für domainübergreifende Serviceanrufe verwendet werden und müssen vor CSRF-Angriffen geschützt werden.

+3

JWT selbst bietet keine Maßnahmen gegen CSRF noch XSS-Angriffe. Signieren ist eine Maßnahme gegen das Manipulieren des Tokens. Token kann auch dann gestohlen werden, wenn es signiert ist. Stormpath hat einen guten Artikel, in dem beschrieben wird, wo Sie die JWT-Tokens speichern sollten und wie Sie sich vor CSFR und XSS schützen können. https://stormpath.com/blog/where-to-store-your-jwts-cookies-vs-html5-web-storage/ –

+4

JWT-Token selbst schützen nicht gegen CSRF, aber sie werden normalerweise in einem Träger verwendet Authentifizierungsschema. Das Bearer Authentication-Schema ist nicht anfällig für CSRF. Ich habe den Stormpath-Artikel gelesen, stimme aber nicht ihren Empfehlungen zu.Wenn Sie JWT-Tokens in einem Cookie speichern, wird es für Nicht-Browser-Clients schwieriger, Ihre API zu verwenden, und es wird schwierig, Ihre APIs in verschiedenen Domänen zu haben. – MvdD

+0

Wenn ich die Anwendung unabhängig vom Kanal machen möchte, denke ich, dass die Verwendung von Cookies keine weise Entscheidung ist. Ich habe gehört, dass einige mobile Geräte Probleme mit Cookies haben. Abhängig von der Client-Anwendung, werden sie entscheiden, wie das Token zu speichern ist (Für Browser-Anwendung, ich denke, HTML5 Web-Session-Speicher ist die Option). Jetzt muss ich die Tokens nach Bedarf ungültig machen, also muss ich von der Serverseite etwas Datenspeicher für sie haben. Halten Sie es für in Ordnung, sie in einer Datenbank zu speichern? – Deibys

1

Von Django REST framework documentation,

JSON Web-Token sind ein ziemlich neuer Standard, der für Token-basierte Authentifizierung verwendet werden kann. Im Gegensatz zum integrierten TokenAuthentication-Schema muss die JWT-Authentifizierung keine Datenbank zur Überprüfung eines Tokens verwenden.