Java >> Java Tutorial >  >> Tag >> Json

Json Web Token (JWT) – Einführung

Wenn Sie mit OAuth oder OpenID oder dem Autorisierungsteil der Sicherheit gearbeitet haben, müssen Sie über einen Begriff namens JSON Web Token – JWT (ausgesprochen als JOT) verfügen.

In diesem Beitrag werde ich seine Komponenten und ein paar Tipps und Tricks erklären. Im vorherigen Post zum Sichern der Spring Boot Rest-API habe ich gezeigt, wie JWT zum Sichern einer REST-API verwendet wird.

JSON Web Token (JWT) ist ein JSON-Objekt, das so definiert ist, dass die teilnehmenden Parteien einer bestimmten Norm zustimmen. Dieses Objekt enthält Informationen, die einen Benutzer oder eine teilnehmende Partei identifizieren können.

JWT ist verschlüsselt und signiert, sodass es sicher verwendet wird. Selbst wenn ein Dritter Zugriff auf JWT erhält, kann dieser es immer entschlüsseln, wenn er über einen öffentlichen Schlüssel verfügt, mit dem es signiert wurde. Außerdem ist JWT normalerweise nur für eine begrenzte Zeit gültig, sodass ein Hacker JWT nicht verwenden kann, wenn es abgelaufen ist und der Hacker JWT entschlüsseln konnte.

Es gibt einige Anwendungsfälle, in denen Sie JWT verwenden können.

  1. Single Sign-On – In einigen Autorisierungsszenarien wird JWT verwendet, um Benutzerinformationen in einem Token zu Authentifizierungszwecken zu verschlüsseln.
  2. JWT bietet viel Sicherheit, daher hilft es, Informationen zwischen Parteien heimlich auszutauschen.

Komponenten

JSON Web Token besteht aus drei Teilen – Header, Payload und Signatur. Sobald Sie ein JWT mit diesen drei Teilen erstellt haben, komprimieren Sie dieses JWT. So liegt jedes JWT in kompakter Form vor.

hhhhhh.pppppppp.ssssss

Header des JSON-Webtokens

Jeder Json Web Token enthält Header, Payload und Signaturteil. Im Header-Teil haben Sie zwei wichtige Elemente – den Algorithmustyp als alg und Schlüssel-ID als kid , kann aber statt dieser beiden Elemente auch alg enthalten und type um anzugeben, um welche Art von Token es sich handelt.

{
   "alg":"HS256",
   "kid": "NHAS42KWE49825JADTWWQRWR"
}

Nutzlast

Die Payload ist der Teil, der tatsächliche Daten in JWT enthält. Grundsätzlich liegen diese Daten in Form von Forderungen vor. Ansprüche sind identifizierende Informationen über den Benutzer oder die Entität. Aber abgesehen von Benutzerinformationen (sub ), enthält es auch einige wichtige Informationen, wann der Token ausgestellt wurde – iat , wer ist der Emittent – ​​iss , was ist die Ablaufzeit exp , was ist die nicht vorher verwendete Zeit nbf .

Ein Beispiel für die JWT-Nutzlast sieht wie folgt aus:

{
  "sub": "betterjavacode\\userabc",
  "created": 1571755568798,
  "iss": "betterjavacode.com",
  "client_id": "randomclient",
  "nbf": 1571755569,
  "scope": "[Email]",
  "exp": 1571759169,
  "expires_in": "3600",
  "iat": 1571755569,
  "jti": "qqwrwe-wewewt-34343re-343gtrtr-323222"
}

Unterschrift

Die Signatur zum Signieren von JWT wird durch die Base64-URL-Codierung des Headers + die Base64-URL-Codierung des Hauptteils und einen geheimen Schlüssel erstellt, und all dies wird unter Verwendung eines Signaturalgorithmus nach Wahl des Servers signiert, in diesem Beispiel ist es HMACSHA256 . Der Server, der JWT erstellt, teilt niemandem einen geheimen Schlüssel und hat seine eigenen Richtlinien, um diesen geheimen Schlüssel zu erstellen. Es kann den öffentlichen Schlüssel angeforderten Clients zur Verfügung stellen.

Wann sollte JWT verwendet werden?

Der übliche Anwendungsfall für JWT sind Authentifizierungszwecke, da es Benutzerdaten enthalten kann. Token sind nur für kurze Zeit gültig, sodass sie nicht kompromittiert werden können. Wenn der Benutzer auf eine geschützte Ressource zugreift, sendet der Benutzeragent JWT im Autorisierungsheader unter Verwendung des Bearer-Schemas. Ein Token sollte vorsichtshalber keine geheimen Informationen enthalten. Selbst wenn ein JWT gestohlen wird, kann in diesem Fall niemand JWT-Daten für andere Zwecke verwenden.

JWT ist eine kompaktere Token-Version, die normalerweise über SAML (Security Assertion Markup Language) ausgetauscht wurde.

Schlussfolgerung

In diesem Beitrag haben wir die Details von JWT besprochen und wann es verwendet werden sollte.

Referenzen

  1. Spezifikation des JSON Web Token – Spezifikationen
  2. JSON Web Token – Offene ID-Spezifikationen


No
Java-Tag