Token Web JSON (JWT)

Tink supporta la generazione e la verifica dei JWT, uno standard ampiamente usato sul web. L'implementazione JWT di Tink fornisce un sottoset dello standard JWT definito in RFC 7519 che il team di Tink considera sicuro da utilizzare e che si adatta bene alla libreria Tink.

Tink non supporta parti dello standard che vengono usate raramente o sono difficili da usare correttamente. Le limitazioni sono le seguenti:

  • Tink supporta solo il formato JWS Compact Serialization. La serializzazione JSON JWS e JWE non sono supportate.
  • Tink non supporta il valore None nell'intestazione alg.
  • Tink supporta solo le intestazioni typ, alg e kid. Tutte le altre intestazioni non sono supportate.
  • Tink non consente l'analisi dei token prima della verifica della firma o dell'indirizzo MAC.

Firme JWT

Se i token vengono generati e verificati da entità diverse, devi usare chiavi asimmetriche con le primitive JwtPublicKeySign e JwtPublicKeyVerify. La chiave privata viene utilizzata per generare token e la chiave pubblica viene utilizzata per verificarli. Gli algoritmi supportati da queste primitive sono: ES256, ES384, ES512, RS256, RS384, RS512, PS256, PS384 e PS512.

Scelta di un tipo di chiave

Le firme JWT utilizzano tipi di chiavi diversi rispetto alla normale firma digitale in Tink. Questa operazione è necessaria perché alcuni metadati (come alg e kid) devono essere archiviati 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 intestazione kid, scegli il tipo di chiave JWT_ES256_RAW. Per tutti i tipi di chiavi supportati, consulta la sezione Tipi di chiavi supportati.

Distribuzione del set di chiavi pubblico

Tink consente di convertire il set di chiavi pubbliche da e verso il formato di set JWK definito in RFC 7517, compreso dalla maggior parte delle librerie JWT.

Tink non supporta l'esportazione di chiavi JWT pubbliche in altri formati. Il motivo è che altri formati non contengono i metadati alg e kid da utilizzare nella verifica, il che rende il loro utilizzo più soggetto a errori e può rendere più difficile la rotazione delle chiavi.

È preferibile condividere il set di chiavi pubblico non solo una volta, ma anche per fornire un modo per aggiornarlo automaticamente. In caso contrario, la rotazione di una nuova chiave è molto difficile. Questo viene spesso fatto pubblicando il set di chiavi pubbliche su un URL attendibile e protetto. Un server che verifica i token deve poi semplicemente recuperare periodicamente il set di chiavi pubbliche 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 di essere 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 set di chiavi pubbliche precedente.

MAC JWT

Tink supporta anche JWT con chiavi simmetriche con la primitiva JwtMac. Usa questa primitiva solo se i token vengono generati e verificati dalla stessa entità. Gli algoritmi supportati da questa primitiva sono HS256, HS384 e HS512.

Scelta di 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.