Was ist JWT (JSON Web Token)?
Format, um Informationen (Claims) in JSON-Form mit einer Signatur zu übergeben. Die drei Teile „Header.Payload.Signatur“ werden jeweils mit Base64URL kodiert und mit „.“ verbunden. Anhand der Signatur lassen sich Manipulationen und der Aussteller prüfen; bei einem typischen signierten JWT ist die Payload jedoch nicht verschlüsselt, daher gehören keine geheimen Informationen hinein. JWTs werden etwa für Access-Tokens zur Authentifizierung an APIs und für ID-Tokens von OpenID Connect verwendet und erhalten meist eine kurze Ablaufzeit (exp).
Japanische Bezeichnung: JWT(JSON Web Token)
„JWT (JSON Web Token)“ kommt in 2 Übungsfragen aus 1 Themen vor, z. B. Grundlagen der Webtechnologien.
Fachgebiet: Grundlagen der Webtechnologien
Prüfung auf dem Server
Ein Server, der ein JWT empfängt, prüft mit dem Schlüssel, ob die Signatur gültig ist, und ob Claims wie die Ablaufzeit und der Empfänger (aud) seine Bedingungen erfüllen. Wichtig ist, dem Wert alg im Header nicht blind zu vertrauen, sondern nur die auf der Serverseite festgelegten Verfahren zu akzeptieren. Ist die Signatur geprüft, kann der Server feststellen, für wen das Token ausgestellt wurde, auch ohne Sitzungsinformationen zu speichern.
Häufige Fragen
Soll ich ein JWT oder eine Sitzungs-ID verwenden?
Eine Sitzungs-ID ist nur ein Schlüssel, mit dem auf dem Server gespeicherte Informationen gefunden werden; Abmeldungen und Sperrungen wirken daher auf der Serverseite sofort. Ein JWT lässt sich prüfen, ohne Informationen auf dem Server zu speichern, und eignet sich deshalb für die Übergabe zwischen mehreren Diensten, hat aber die Schwäche, schwer widerrufbar zu sein. Für die Anmeldung bei einer einzelnen Website ist eine Sitzungs-ID oft einfacher zu handhaben.
Was ist der Unterschied zwischen Base64URL und Base64?
Base64URL ist eine Variante von Base64, die „+“ und „/“, die in URLs eine besondere Bedeutung haben, durch „-“ und „_“ ersetzt und das abschließende „=“ oft weglässt. JWTs verwenden diese Form, damit sie unverändert in URLs und HTTP-Header gesetzt werden können. Beides ist keine Verschlüsselung; jeder kann es zurückwandeln.