Tink 支援產生及驗證 JWT,這是網路上廣泛使用的標準。Tink 的 JWT 實作提供 RFC 7519 中定義的 JWT 標準子集,Tink 團隊認為可安全使用,適合 Tink 程式庫。
Tink 不支援標準中很少使用或難以正確使用的部分。限制如下:
- Tink 僅支援 JWS 精簡序列化格式。不支援 JWS JSON 序列化和 JWE。
- Tink 不支援
alg
標頭中的None
值。 - Tink 僅支援
typ
、alg
和kid
標頭。系統不支援所有其他標頭。 - Tink 不允許在驗證簽章或 MAC 前剖析符記。
JWT 簽章
如果符記是由不同實體產生及驗證,則應搭配原始 JwtPublicKeySign
和 JwtPublicKeyVerify
使用非對稱金鑰。私密金鑰用於產生權杖,公開金鑰則用於驗證權杖。這些基本支援的演算法包括:ES256
、ES384
、ES512
、RS256
、RS384
、RS512
、PS256
、PS384
和 PS512
。
選擇金鑰類型
與 Tink 中的一般數位簽章相比,JWT 簽名使用的金鑰類型「不同」。由於某些中繼資料 (例如 alg
和 kid
) 需要與鍵一起儲存,因此需要這麼做。
大多數用途都建議使用 JWT_ES256
。使用此金鑰類型產生的權杖一律會有 kid
標頭。如果您希望在沒有 kid
標頭的情況下稍微縮短符記,請選擇鍵類型 JWT_ES256_RAW
。如需所有支援的金鑰類型,請參閱支援的金鑰類型。
公開金鑰發布
Tink 允許將公開金鑰轉換成 RFC 7517 中定義的 JWK Sets 格式,這也是多數 JWT 程式庫能夠解讀的 JWK Sets 格式。
Tink 不支援以任何其他格式匯出公開 JWT 金鑰。這是因為其他格式不含 alg
和 kid
中繼資料 (用於驗證),因此使用起來較容易出錯,且更難以輪替金鑰。
建議您不要隻共用一次公開金鑰,而是提供自動更新公開金鑰集的方式。(如果不允許,輪替新金鑰非常困難)。通常就是將公開金鑰發布到受信任且安全的網址。接著,驗證權杖的伺服器只需要定期從該網址重新擷取公開金鑰,例如每天一次。如要輪替金鑰,您至少要過一天,才能將新的公開金鑰新增至公開金鑰集以簽署權杖。否則,使用舊版公開金鑰集的伺服器會拒絕使用新私密金鑰簽署的新憑證。
JWT MAC
Tink 也支援搭配原始 JwtMac
的對稱金鑰的 JWT。只有在權杖是由同一個實體產生及驗證時,才能使用這個基本元素。這個原始版本支援的演算法為 HS256
、HS384
和 HS512
。
選擇金鑰類型
JWT MAC 金鑰類型與一般 MAC 金鑰類型「不同」。大多數用途都建議使用 JWT_HS256
。