JSON-Webtokens (JWTs)

Tink unterstützt das Generieren und Überprüfen von JWTs, einem weit verbreiteten Webstandard. Die JWT-Implementierung von Tink bietet eine Teilmenge des in RFC 7519 definierten JWT-Standards, den das Tink-Team als sicher erachtet und gut in die Tink-Bibliothek passt.

Tink unterstützt keine Teile des Standards, die selten oder schwer richtig zu verwenden sind. Folgende Einschränkungen gelten:

  • Tink unterstützt nur das JWS Compact Serialization-Format. JWS-JSON-Serialisierung und JWE werden nicht unterstützt.
  • Tink unterstützt nicht den None-Wert im alg-Header.
  • Tink unterstützt nur die Header typ, alg und kid. Alle anderen Header werden nicht unterstützt.
  • Tink lässt nicht zu, dass Tokens geparst werden, bevor die Signatur oder der MAC verifiziert ist.

JWT-Signaturen

Wenn Tokens von verschiedenen Entitäten generiert und verifiziert werden, sollten Sie asymmetrische Schlüssel mit den Primitiven JwtPublicKeySign und JwtPublicKeyVerify verwenden. Der private Schlüssel wird zum Generieren von Tokens und der öffentliche Schlüssel zum Überprüfen von Tokens verwendet. Diese Algorithmen werden von diesen Primitiven unterstützt: ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384 und PS512.

Schlüsseltyp auswählen

JWT-Signaturen verwenden andere Schlüsseltypen als die normale digitale Signatur in Tink. Dies ist erforderlich, da einige Metadaten wie alg und kid zusammen mit dem Schlüssel gespeichert werden müssen.

Für die meisten Anwendungsfälle empfehlen wir die Verwendung von JWT_ES256. Tokens, die mit diesem Schlüsseltyp generiert werden, 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. Informationen zu allen unterstützten Schlüsseltypen finden Sie unter Unterstützte Schlüsseltypen.

Verteilung des öffentlichen Schlüsselsatzes

Tink ermöglicht die Konvertierung von öffentlichem Keyset in das und aus dem in RFC 7517 definierten JWK-Set-Format, das von den meisten JWT-Bibliotheken verstanden wird.

Tink unterstützt nicht den Export öffentlicher JWT-Schlüssel in einem anderen Format. Der Grund dafür ist, dass andere Formate die alg- und kid-Metadaten nicht enthalten, die bei der Überprüfung verwendet werden müssen. Dadurch sind sie fehleranfälliger und die Schlüsselrotation erschweren sich.

Wir empfehlen, das öffentliche Schlüsselsatz nicht nur einmal freizugeben, sondern auch, um eine Möglichkeit zur automatischen Aktualisierung des öffentlichen Schlüsselsatzes zu bieten. (Andernfalls ist die Rotation zu einem neuen Schlüssel sehr schwierig.) Dazu wird der öffentliche Schlüsselsatz häufig unter einer vertrauenswürdigen und gesicherten URL veröffentlicht. Ein Server, der Tokens verifiziert, muss dann das öffentliche Schlüsselsatz regelmäßig, beispielsweise einmal pro Tag, von dieser URL abrufen. Zum Rotieren des Schlüssels muss der neue öffentliche Schlüssel dem öffentlichen Schlüsselsatz mindestens einen Tag vor dem Signieren von Tokens hinzugefügt werden. Andernfalls werden die neuen Tokens, die mit dem neuen privaten Schlüssel signiert sind, von Servern abgelehnt, die noch das alte öffentliche Schlüsselsatz verwenden.

JWT-MAC

Tink unterstützt auch JWT mit symmetrischen Schlüsseln mit dem einfachen JwtMac. Verwenden Sie diese einfache Methode nur, wenn die Tokens von derselben Entität generiert und verifiziert werden. Die von dieser Primitiven unterstützten Algorithmen sind HS256, HS384 und HS512.

Schlüsseltyp auswählen

Die JWT-MAC-Schlüsseltypen unterscheiden sich von den normalen MAC-Schlüsseltypen. Wir empfehlen für die meisten Anwendungsfälle die Verwendung von JWT_HS256.