JSON Web Tokens (JWTs)

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 Header alg nicht.
  • Tink unterstützt nur die Header typ, alg und kid. 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.