Tink unterstützt das Generieren und Überprüfen von JWTs, die im Web weit verbreitet sind. Die JWT-Implementierung von Tink bietet eine Teilmenge des in RFC 7519 definierten JWT-Standards, die das Tink-Team für sicher hält und die gut in die Tink-Bibliothek passt.
Tink unterstützt keine Teile des Standards, die selten verwendet werden oder schwer richtig zu verwenden sind. Es gelten folgende Einschränkungen:
- Tink unterstützt nur das Format JWS Compact Serialization. Die JWS-JSON-Serialisierung und JWE werden nicht unterstützt.
- Tink unterstützt den Wert
None
im Headeralg
nicht. - Tink unterstützt nur die Header
typ
,alg
undkid
. Alle anderen Header werden nicht unterstützt. - Mit Tink können Tokens erst geparst werden, wenn die Signatur oder der MAC überprüft wurde.
JWT-Signaturen
Wenn Tokens von verschiedenen Entitäten generiert und überprüft werden, sollten Sie asymmetrische Schlüssel mit den Primitiven JwtPublicKeySign
und JwtPublicKeyVerify
verwenden.
Der private Schlüssel wird zum Generieren von Tokens verwendet und der öffentliche Schlüssel zum Überprüfen von Tokens. Die von diesen Primitiven unterstützten Algorithmen sind: ES256
, ES384
, ES512
, RS256
, RS384
, RS512
, PS256
, PS384
und PS512
.
Schlüsseltyp auswählen
Für JWT-Signaturen werden andere Schlüsseltypen als für die normale digitale Signatur in Tink verwendet. Das ist erforderlich, da einige Metadaten (z. B. alg
und kid
) mit dem Schlüssel gespeichert werden müssen.
Wir empfehlen, JWT_ES256
für die meisten Anwendungsfälle zu verwenden. Mit diesem Schlüsseltyp generierte Tokens haben immer einen kid
-Header. Wenn Sie etwas kürzere Tokens ohne kid
-Header bevorzugen, wählen Sie den Schlüsseltyp JWT_ES256_RAW
aus. Eine Liste aller unterstützten Schlüsseltypen finden Sie unter Unterstützte Schlüsseltypen.
Verteilung von öffentlichen Schlüsselsätzen
Mit Tink können öffentliche Schlüsselsätze in das in RFC 7517 definierte JWK-Set-Format konvertiert werden, das von den meisten JWT-Bibliotheken unterstützt wird.
Tink unterstützt den Export öffentlicher JWT-Schlüssel in keinem anderen Format. Der Grund dafür ist, dass andere Formate nicht die Metadaten alg
und kid
enthalten, die für die Bestätigung verwendet werden. Dadurch ist die Verwendung fehleranfälliger und es kann schwieriger sein, Schlüssel zu rotieren.
Es ist besser, den öffentlichen Schlüsselsatz nicht nur einmal zu teilen, sondern eine Möglichkeit zu bieten, ihn automatisch zu aktualisieren. Andernfalls ist die Rotation zu einem neuen Schlüssel sehr schwierig. Dies geschieht häufig durch die Veröffentlichung des öffentlichen Keysets unter einer vertrauenswürdigen und sicheren URL. Ein Server, der Tokens verifiziert, muss den öffentlichen Schlüsselsatz regelmäßig, z. B. einmal täglich, von dieser URL abrufen. Um den Schlüssel zu rotieren, muss der neue öffentliche Schlüssel mindestens einen Tag vorher dem öffentlichen Schlüsselsatz hinzugefügt werden, bevor er zum Signieren von Tokens verwendet wird. Andernfalls werden die neuen Token, die mit dem neuen privaten Schlüssel signiert sind, von Servern abgelehnt, die noch den alten öffentlichen Schlüsselsatz verwenden.
JWT-MAC
Tink unterstützt auch JWT mit symmetrischen Schlüsseln mit dem Primitiv JwtMac
. Verwenden Sie dieses Primitive nur, wenn die Tokens von derselben Einheit generiert und bestätigt werden. Die von diesem Primitive unterstützten Algorithmen sind HS256
, HS384
und HS512
.
Schlüsseltyp auswählen
JWT-MAC-Schlüsseltypen unterscheiden sich von normalen MAC-Schlüsseltypen. Wir empfehlen, JWT_HS256
für die meisten Anwendungsfälle zu verwenden.
Beispielanwendungsfälle
Weitere Informationen finden Sie unter Ich möchte JWTs erstellen und überprüfen.