Tink supporta la generazione e la verifica dei JWT, uno standard ampiamente utilizzato sul web. L'implementazione JWT di Tink fornisce un sottoinsieme dello standard JWT definito nella RFC 7519 che il team di Tink considera sicuro da utilizzare e che si adatta bene alla libreria Tink.
Tink non supporta le parti dello standard che vengono utilizzate raramente o che sono difficili da utilizzare correttamente. Queste sono le limitazioni:
- Tink supporta solo il formato JWS Compact Serialization. JWS JSON Serialization e JWE non sono supportati.
- Tink non supporta il valore
None
nell'intestazionealg
. - Tink supporta solo le intestazioni
typ
,alg
ekid
. Tutte le altre intestazioni non sono supportate. - Tink non consente l'analisi dei token prima della verifica della firma o del MAC.
Firme JWT
Se i token vengono generati e verificati da entità diverse, devi utilizzare
chiavi asimmetriche con le primitive JwtPublicKeySign
e JwtPublicKeyVerify
.
La chiave privata viene utilizzata per generare i token, mentre la chiave pubblica viene utilizzata per verificarli. Gli algoritmi supportati da queste primitive sono: ES256
,
ES384
, ES512
, RS256
, RS384
, RS512
, PS256
, PS384
e PS512
.
Scegli un tipo di chiave
Le firme JWT utilizzano tipi di chiavi diversi rispetto alla normale firma digitale in
Tink. Questo è necessario perché alcuni metadati (come alg
e kid
) devono essere
memorizzati con la chiave.
Ti consigliamo di utilizzare JWT_ES256
per la maggior parte dei casi d'uso. I token generati con questo
tipo di chiave hanno sempre un'intestazione kid
. Se preferisci token leggermente più brevi
senza un'intestazione kid
, scegli il tipo di chiave JWT_ES256_RAW
. Per tutti i tipi di chiavi supportati, consulta Tipi di chiavi supportati.
Distribuzione del keyset pubblico
Tink consente di convertire i set di chiavi pubbliche nel formato JWK Sets e viceversa definito nella RFC 7517, che la maggior parte delle librerie JWT comprende.
Tink non supporta l'esportazione di chiavi JWT pubbliche in altri formati. Il motivo
è che gli altri formati non contengono i metadati alg
e kid
da utilizzare
nella verifica, il che li rende più soggetti a errori e potrebbe rendere
più difficile la rotazione delle chiavi.
È preferibile non condividere il set di chiavi pubbliche una sola volta, ma fornire un modo per aggiornarlo automaticamente. In caso contrario, la rotazione a una nuova chiave è molto difficile. Questa operazione viene spesso eseguita pubblicando il set di chiavi pubbliche su un URL attendibile e sicuro. Un server che verifica i token deve recuperare periodicamente il keyset pubblico da quell'URL, ad esempio una volta al giorno. Per ruotare la chiave, la nuova chiave pubblica deve essere aggiunta al set di chiavi pubbliche almeno un giorno prima che venga utilizzata per firmare i token. In caso contrario, i nuovi token firmati con la nuova chiave privata verranno rifiutati dai server che utilizzano ancora il vecchio set di chiavi pubbliche.
JWT MAC
Tink supporta anche i JWT con chiavi simmetriche con la primitiva JwtMac
. Utilizza questo primitivo solo se i token vengono generati e verificati dalla stessa entità. Gli
algoritmi supportati da questa primitiva sono HS256
, HS384
e
HS512
.
Scegli un tipo di chiave
I tipi di chiavi MAC JWT sono diversi dai normali tipi di chiavi MAC. Ti consigliamo di utilizzare
JWT_HS256
per la maggior parte dei casi d'uso.
Esempi di casi d'uso
Consulta Voglio creare e verificare i JWT.