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 alg nell'intestazione del gettone, RS256 oppure ES256: non occorre alcuna selezione manuale.
  • Insieme alla firma si controlla anche la dichiarazione exp del 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

Soltanto RS256 ed ES256. Gli algoritmi HS256, HS384 e HS512 sono a chiave condivisa e non si possono verificare con il solo inserimento di una chiave pubblica. Per esaminare una firma HS256 potete rifirmare il gettone con la stessa chiave nel codificatore di JWT e confrontare i risultati.

I fornitori di identità come Google, Auth0 e Okta distribuiscono le proprie chiavi pubbliche attraverso un punto di accesso pubblico, l'insieme delle chiavi web in formato JSON. Convertite quel JSON in formato PEM con un apposito strumento oppure usate la chiave pubblica riportata nella documentazione del servizio.

Le cause principali sono tre: la chiave pubblica inserita non forma coppia con la chiave privata che ha emesso il gettone; una delle tre parti del gettone è stata alterata o si è corrotta durante la trasmissione; qualche carattere si è perduto nella copia. Copiate di nuovo con esattezza sia la stringa del gettone sia la chiave pubblica dalla fonte originaria.

Al momento sono previsti soltanto RS256 ed ES256. Le varianti con funzioni di sintesi più lunghe — RS384, RS512, ES384, ES512 — sono allo studio come possibili aggiunte future.

Sì: la validità della firma e il superamento della scadenza sono giudicati separatamente e mostrati entrambi. Un gettone scaduto, anche se correttamente firmato, andrebbe di norma rifiutato dal sistema reale: verificate sempre anche l'avviso sulla scadenza.
Tool-kun

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.