JWTデコードの仕組み
JSON Web Token (JWT) は、認証や安全なデータ交換に使用されるコンパクトなURLセーフなトークンです。JWTはドット(.)で区切られた3つの部分で構成されています:
ヘッダー.ペイロード.署名
- ヘッダー – トークンのタイプと署名アルゴリズムが含まれます
- ペイロード – ユーザーID、発行者、有効期限などのクレームが含まれます
- 署名 – トークンが改ざんされていないことを検証します
JWTをデコードすることで、開発者は内容を確認し、トークンが有効か、期限切れか、または誤って発行されていないかを判断できます。
JWTトークンの例
以下はJWTの簡単な例です:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9
.
eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNjAwMDAwMDAwLCJleHAiOjE5MDAwMDAwMDB9
.
SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
デコード済み ヘッダー
{
"alg": "HS256",
"typ": "JWT"
}
これは、トークンがHS256アルゴリズムを使用している標準的なJWTであることを示しています。
デコード済み ペイロード
{
"sub": "1234567890",
"name": "John Doe",
"iat": 1600000000,
"exp": 1900000000
}
主要フィールドの解説:
- sub – サブジェクト(ユーザー識別子)
- name – ユーザーの表示名
- iat – トークンの発行時刻
- exp – トークンが無効になる有効期限タイムスタンプ
署名の検証
JWTの最後の部分は署名であり、以下を保証します:
- トークンの内容が改ざんされていないこと
- 信頼できるソースから発行されたこと
検証には以下が使用されます:
- HS256トークン用の共有シークレット
- RS256トークン用のJWKSエンドポイントの公開鍵
検証に失敗した場合、そのトークンは信頼すべきではありません。
JWTデコーダーの利用シーン
開発者は通常、以下の目的でデコードを行います:
- ログインや認証問題のデバッグ
- 有効期限や更新タイミングの確認
- IDプロバイダーから返されたクレームの確認
- API連携時の署名の検証
このツールはトークンを保存せずに安全に解析できるため、開発やトラブルシューティングに最適です。
よくある質問 (FAQ)
安全に情報を転送するためのコンパクトな文字列です。認証やAPIセキュリティに広く使われています。
エンコードされたトークンを読み取り可能なJSONに変換し、ヘッダーやペイロードを確認できるようにします。
いいえ。デコードは内容を表示するだけです。
検証は、署名をチェックしてトークンが真正で改ざんされていないことを確認する作業です。
はい。トークンは保存されません。ただし、本番用の機密トークンを公開環境で扱う際は注意してください。
ペイロード内の 'exp' クレームを確認してください。
現在時刻がその数値を超えている場合、トークンは無効です。
RS256などで署名されたトークンを検証するための公開鍵を提供するエンドポイントです。
主な理由は以下の通りです:
- シークレットや公開鍵の間違い
- 発行後のトークン改ざん
- アルゴリズムの不一致
- トークンの期限切れ