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. |
Consigli
- 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à.
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.