Berdasarkan sejarah tersebut dan beberapa standar sebagai dasar, bagaimana kita dapat memproses JWT yang tercantum di atas dan informasi apa saja yang ada di dalamnya?
JWT di atas terdiri dari tiga bagian, yang masing-masing dipisahkan oleh titik (‘.’):
- Header: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
- Payload: eyJzdWIiOiIxMjM0NTY3ODkwQUJDIiwibmFtZSI6IkhlbnJpayBMb2VzZXIiLCJpYXQiOjE2MTExNDA0MDAsImV4cCI6MTYxMTIzNDU2N30
- Tanda tangan: _iVbBcypdse-9sjrxp9iOrGsXKBWrBB3mrHgBtukcfM
Baik header maupun payload dienkodekan dengan base64url dan, tanpa memperhitungkan kemungkinan padding, dapat didekodekan seperti ini:
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
Header berisi informasi tentang alg (algoritma) yang digunakan — di sini, HS256 (HMAC SHA256). Payload mengandalkan jenis token (access/refresh/ID/…) dan terdiri dari klaim. Bidang header dan payload JOSE tersebut dan lainnya yang telah ditentukan sebelumnya dikelola oleh IANA. Dalam contoh di atas, bidang dan klaimnya adalah "sub" (subjek), "name" (nama), "iat" (diterbitkan pada), dan "exp" (waktu kedaluwarsa).
Tanda tangan dihitung dengan menerapkan algoritma yang disebutkan pada rangkaian header, ‘.’ dan payload dan kemudian mengenkodekan hasil dengan base64url. Oleh karena itu, ketiga bagian yang dipisahkan oleh titik akan membentuk JWT. Penjelasan tentang cara tanda tangan dibuat tersedia di RFC 7515.
Anda dapat mengakses JWT di atas pada debugger online ini di JTW.io. Pertama-tama, akan ditampilkan pesan “Invalid Signature”. Anda dapat mengatasinya dengan mengganti rahasia default yang ditampilkan dengan !!!my-really-big-256-bit-secret!!!.