Verifica della firma di un JWT (RS256 ed ES256, con chiave pubblica)
Strumento per sviluppatori che verifica all'istante i gettoni JWT firmati con RS256 o ES256, servendosi di una chiave pubblica in formato PEM di tipo SPKI. Mostra insieme il risultato della decodifica di intestazione e contenuto e la scadenza. Nulla di quanto inserite viene trasmesso a un servente: tutto avviene nel navigatore.
Gli algoritmi di firma previsti
| Algoritmo | Tipo di chiave | Funzione di sintesi | Descrizione |
|---|---|---|---|
| RS256 | RSA (RSASSA-PKCS1-v1_5) | SHA-256 | Firma con crittografia a chiave pubblica RSA. È l'algoritmo predefinito e standard che i principali fornitori di identità — Google, Auth0, Okta — usano per i gettoni di identità. |
| ES256 | ECDSA (curva ellittica P-256) | SHA-256 | Firma con crittografia a curve ellittiche, che offre una sicurezza equivalente a RSA con chiavi e firme molto più brevi. Se ne diffonde l'adozione nelle applicazioni per dispositivi mobili e negli apparecchi connessi, dove conta contenere la quantità di dati. |
Verificare la firma di un JWT con una chiave pubblica
Questo strumento verifica un JWT firmato con RS256 o ES256 a fronte di una chiave pubblica in PEM nel formato SPKI. Mostra l'intestazione e il carico utile decodificati accanto alla scadenza. Tutto ciò che inserite viene elaborato dentro il browser e non è mai inviato altrove.
Merita sottolineare che una firma valida e un token valido sono due cose distinte. Che una firma si verifichi prova unicamente che il contenuto non è stato riscritto dopo l'emissione. L'autenticazione vera richiede inoltre di controllare che exp per la scadenza, nbf per l'istante da cui vale, iss per l'emittente e aud per il destinatario previsto concordino con ciò che vi attendete. L'altro inciampo ben noto nell'implementazione consiste nel lasciare che sia l'intestazione stessa del token a decidere con quale algoritmo verificare. Se il server non fissa in anticipo l'alg accettabile, lascia quella scelta a portata di un aggressore.
Come verificare
- Incollate il JWT È una stringa di tre parti separate da punti.
- Incollate la chiave pubblica in formato PEM Occorre la chiave pubblica, non quella privata. RS256 prende una chiave RSA ed ES256 una chiave sulla curva P-256.
- Verificate la firma Lo strumento riferisce se chiave e firma concordano.
- Controllate il contenuto decodificato e la scadenza Un token la cui firma si verifica non va comunque usato una volta scaduto. Guardate entrambe le cose.
Consigli per sfruttarlo al meglio
- La chiave pubblica deve essere in formato PEM di tipo SPKI, cioè cominciare con «-----BEGIN PUBLIC KEY-----». Incollando un file di chiave privata o un certificato la verifica non riesce.
- L'algoritmo di verifica si sceglie automaticamente in base al valore del campo
algnell'intestazione del gettone, RS256 oppure ES256: non occorre alcuna selezione manuale. - Insieme alla firma si controlla anche la dichiarazione
expdel contenuto e, in caso di scadenza superata, compare un avviso. Un gettone scaduto va comunque rifiutato, anche se la firma è corretta. - Lo strumento prevede soltanto RS256 ed ES256. Per esaminare un gettone firmato con un metodo a chiave condivisa come HS256, potete rifirmarlo con la stessa chiave nel codificatore di JWT e confrontare i risultati.
- La chiave pubblica usata nella verifica non è un'informazione riservata: potete incollare senz'altro quella ottenuta dai punti di accesso pubblici del vostro fornitore di identità.
Quando torna utile
Nell'esaminare il contenuto di un token di identità
Un token emesso da un fornitore di identità si può riscontrare con la sua chiave pubblica.
Nel distinguere una chiave sbagliata da una firma guasta
Quando la verifica fallisce, potete stabilire sul posto quale delle due sia in causa.
Nel provare una rotazione delle chiavi
Provare a turno la chiave vecchia e quella nuova conferma che il ricambio si svolgerà come previsto.
Nel risalire alla causa di un guasto
Di fronte a una segnalazione di autenticazione fallita, potete stabilire per prima cosa se sia il token stesso a esserne responsabile.
Termini della verifica di un JWT
- RS256
- Un procedimento di firma che usa una chiave RSA con SHA-256. Firmare richiede la chiave privata, verificare quella pubblica.
- ES256
- Un procedimento di firma che usa la curva P-256 con SHA-256. Tanto la chiave quanto la firma riescono più corte che con RSA.
- SPKI
- La forma normalizzata in cui viene portata una chiave pubblica. In PEM si apre con
-----BEGIN PUBLIC KEY-----. - Exp
- La rivendicazione che dà la scadenza. Per quanto impeccabile sia la firma, un token oltre quell'istante non va accettato.
- Nbf
- La rivendicazione che indica da quale istante il token diventa utilizzabile. Prima di allora non è ancora in vigore.
- Confusione di algoritmi
- Una debolezza delle implementazioni che verificano con l'algoritmo indicato dall'intestazione del token. Il procedimento accettato va fissato dal lato che verifica.
Domande frequenti
A proposito — che cosa distingue HMAC dalla firma a chiave pubblica
I metodi di firma dei JWT si dividono grosso modo in quelli a chiave condivisa, cioè HMAC come HS256, e in quelli a chiave pubblica, cioè RSA ed ECDSA come RS256 ed ES256. I primi richiedono che chi firma e chi verifica condividano la stessa stringa segreta, mentre nei secondi soltanto chi firma possiede la chiave privata e chiunque può verificare con la chiave pubblica. La differenza incide direttamente sulla ripartizione dei ruoli nella progettazione di un'interfaccia: lo strumento affine di codifica, fondato su HS256, si rivolge ai casi in cui emittente e verificatore coincidono nello stesso servente, mentre RS256 ed ES256, oggetto di questa pagina, ai casi in cui emittente e verificatore sono organizzazioni o serventi diversi.
Non a caso i gettoni di identità emessi dai principali fornitori — le implementazioni di OAuth 2.0 e OpenID Connect di Google, Auth0, Okta — sono quasi senza eccezione firmati con RS256, talvolta con la possibilità di scegliere ES256. In questo modo soltanto il fornitore firma con la propria chiave privata, mentre le innumerevoli applicazioni clienti verificano con la sola chiave pubblica: non occorre distribuire la chiave privata a tutti i clienti e il rischio di divulgazione resta confinato in un solo punto.
RS256 ed ES256 usano entrambi la funzione di sintesi SHA-256, ma differiscono nel metodo crittografico. RS256 si serve della crittografia RSA, di norma con chiavi di almeno 2048 bit, e produce firme piuttosto voluminose, ma vanta una realizzazione matura e un'ampia disponibilità di librerie. ES256 usa la crittografia a curve ellittiche P-256 e assicura una sicurezza equivalente con chiavi e firme assai più brevi: se ne diffonde perciò l'adozione negli ambienti mobili e nelle interfacce in cui conta contenere la dimensione dei dati.