Con questa storia e alcuni standard come base, come possiamo elaborare il JWT sopra menzionato e quali informazioni contiene?
Il JWT di cui sopra è composto da tre parti, separate ciascuna da un punto ("."):
- Intestazione: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
- Payload: eyJzdWIiOiIxMjM0NTY3ODkwQUJDIiwibmFtZSI6IkhlbnJpayBMb2VzZXIiLCJpYXQiOjE2MTExNDA0MDAsImV4cCI6MTYxMTIzNDU2N30
- Firma: _iVbBcypdse-9sjrxp9iOrGsXKBWrBB3mrHgBtukcfM
Sia l'intestazione che il payload sono codificati con base64url e, non tenendo conto di un possibile padding, possono essere decodificati in questo modo:
henrik@home> base64 -d <<< eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
{"alg":"HS256","typ":"JWT"}
henrik@home> base64 -d <<< eyJzdWIiOiIxMjM0NTY3ODkwQUJDIiwibmFtZSI6IkhlbnJpayBMb2VzZXIiLCJpYXQiOjE2MTExNDA0MDAsImV4cCI6MTYxMTIzNDU2N30
{"sub":"1234567890ABC","name":"Henrik Loeser","iat":1611140400,"exp":1611234567}base64: invalid input
L'intestazione contiene informazioni sull'algoritmo utilizzato, in questo caso, HS256 (HMAC SHA256). Il payload dipende dal tipo di token (accesso, refresh, ID, ecc.) ed è composto da claim. Questi e altri campi predefiniti dell'intestazione e del payload JOSE sono gestiti da IANA. Nell’esempio sopra, i campi e i claim sono subj(ect), name, issued at (iat) ed exp(iration time).
La firma viene calcolata applicando l'algoritmo dichiarato alla concatenazione di intestazione, '.' e payload e quindi base64url codifica il risultato. Successivamente, le tre parti separate da un punto compongono il JWT. I dettagli su come vengono derivate le firme sono definiti in RFC 7515.
È possibile accedere al JWT sopra indicato tramite questo debugger online su JTW.io. Per prima cosa verrà visualizzato il messaggio "Invalid Signature". È possibile risolverlo sostituendo il segreto predefinito visualizzato con !!!my-really-big-256-bit-secret!!!.