2016-08-09 7 views
3

Wie ist die Verwendung eines JSON-Webtokens sicherer als ein opakes Sitzungstoken? In beiden Szenarien werden die Token zuerst an den Client gesendet und dann auf dem Server überprüft, wenn ein Client eine geschützte Ressource anfordert.Wie ist JSON Web Token sicherer als Cookie/Sitzung?

+0

Sie können überprüfen: http://cryto.net/~joepie91/blog/2016/06/13/stop-using-jwt-for-sessions – dbautistav

Antwort

3

Es gibt verschiedene Gründe, warum JWTs sicherer sind. Ich liste sie auf und gebe Ihnen auch Gründe, warum das nicht wirklich der Fall ist, da es in beide Richtungen schwingt.

  1. JWTs können mit einem Geheimnis mit sicheren Algorithmen wie HS256 und RS256 signiert werden. Eine umfassende Liste finden Sie here. Darüber hinaus können Sie auch die Nutzlast des JSON-Web-Tokens verschlüsseln. Sitzungstoken können jedoch auch mit einem erstklassigen Algorithmus sicher erstellt und in einem signierten Cookie gespeichert werden.

  2. JWT kann entweder in einem Cookie oder im Web Storage (lokaler/Session Storage) gespeichert werden. Wenn Sie Ihre JWTs nicht in einem Cookie speichern, sind Sie nicht anfällig für CSRF. Und Sie können entscheiden, sie über den Autorisierungsheader für jede HTTP-Anfrage zu senden. Es gibt jedoch noch einen Vorbehalt. Javascript wird verwendet, um vom Webspeicher aus auf den JWT zuzugreifen, wodurch Sie weiterhin für andere Angriffsformen wie XSS (Cross-Site Scripting) offen sind. Erwähnenswert ist, dass es einfacher ist, mit XSS als CSRF umzugehen.

  3. In einer Situation, in der Ihr JWT manipuliert wurde, können Sie das Token widerrufen oder auf die schwarze Liste setzen. Dies bedeutet, dass Sie jedes Mal einen Anruf bei der Datenbank tätigen müssen, wenn Sie diese Art von Operation durchführen möchten, von der ich Ihnen nicht rate. Die bevorzugte Option besteht darin, kurzlebige Token zu verwenden.

Im Fall von OAuth, undurchsichtigen Token sonst als Träger Token bekannt sind zufällige Zeichenfolge, die in irgendeiner Art von Hash-Speicher auf dem Server zusammen mit einem Ablauf gespeichert werden, wobei der Umfang angefordert (zB Zugriff auf Freundesliste) und der Benutzer, der seine Zustimmung gegeben hat. Später, wenn die API aufgerufen wird, wird dieses Token gesendet und die Server-Suche in der Hash-Tabelle durchgeführt, um den Kontext für die Autorisierungsentscheidung zu regenerieren (ist sie abgelaufen?) Hat dieser Token den richtigen Bereich, der mit der API verknüpft sein soll zugegriffen?). Der Hauptunterschied zwischen opaken Token und signierten Token (z. B. JWT) besteht darin, dass JWTs zustandslos sind. Sie müssen nicht in einer Hash-Tabelle gespeichert werden.

Fazit

Die Bibliotheken verwenden, um Ihre JWTs zu signieren und verschlüsseln sicher sein sollten Ihren Authentifizierungsprozess, um sicherzustellen, ist auch sicher. Sie sollten Cookies auch als Speichermechanismus verwenden, anstatt sie für die Anmeldung zu verwenden. Sie können argumentieren, dass die Verwendung von JWTs mehr Vorteile bietet, da sie einfacher zu skalieren sind und in OAuth-Fällen verwendet werden können, die Sie in dieser article finden können. Am Ende des Tages fällt es meiner Meinung nach einfach auf die Logik/Logik der Entwickler, um sicherzustellen, dass die richtigen Schritte befolgt werden, um eine App zu sichern, unabhängig davon, welche Form von Token für die Authentifizierung oder Autorisierung verwendet wird. Use Case ist auch in diesem Zusammenhang der Schlüssel!

Verwandte Themen