その歴史といくつかの基準を基盤として、上記のJWTをどのように処理し、どのような情報を保持しているのでしょうか?
上記のJWTは3つの部分で構成されており、それぞれがドット(「.」)で区切られています。
- ヘッダー:: eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
- ペイロード: eyJzdWIiOiIxMjM0NTY3ODkwQUJDIiwibmFtZSI6IkhlbnJpayBMb2VzZXIiLCJpYXQiOjE2MTExNDA0MDAsImV4cCI6MTYxMTIzNDU2N30
- 署名: _iVbBcypdse-9sjrxp9iOrGsXKBWrBB3mrHgBtukcfM
ヘッダーとペイロードは両方ともbase64urlでエンコードされており、パディングを考慮せずに次のようにデコードできます。
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
ヘッダーには、使用されているアルゴリズム(ここでは HS256( HMAC SHA256))に関する情報が含まれます。ペイロードは、(アクセス/リフレッシュ/ID/…)トークンの種類によって異なり、クレームで構成されています。これらおよびその他の定義済み JOSE ヘッダーおよびペイロード フィールドは、 IANAによって管理されます。上記の例では、フィールドとクレームは、件名、名前、発行日時、および有効期限です。
署名は、指定されたアルゴリズムをヘッダー、「.」、ペイロードの連結に適用し、base64urlエンコードすることによって計算されます。その後、ドットで区切られた3つの部分がJWTを構成します。署名の導出方法の詳細は、 RFC 7515 で定義されています。
上記の JWT には、JTW.io のオンライン デバッガーでアクセスできます。まず、「署名が無効です」というメッセージが表示されます。表示されているデフォルトのシークレットを「!!!my-really-big-256-bit-secret!!!」に置き換えることで、この問題を解決できます。