Token web JSON (JWT)

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'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 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.