JWT Decoder で JSON Web Token を読み解く
このデコーダーができること
JSON Web Token は、ピリオドでつながれた 3 つの Base64URL エンコード部分、つまり header・payload・signature で構成されます。このデコーダーは文字列をそのピリオドで分割し、header と payload を読める JSON に復元して、signature 部分はそのまま表示します。header の alg フィールドを読み取り、標準の登録済みクレーム(sub・iss・aud・jti)と時刻系クレームを並べて示すので、そのトークンが何を主張しているのかを一目で確認できます。
トークンを貼り付けた時点でデコードが走り、別途送信ボタンを押す必要はありません。デコード結果の構造をとりあえず見てみたいときのために、サンプルトークンも用意されています。
こんなときに使う
認証付きリクエストの挙動がおかしく、トークンが実際に何を運んでいるのかを確かめたいときに役立ちます。よくあるのは原因のわからない 401 です。トークンを貼り付ければ、ステータス表示が有効期限切れなのか、まだ有効になっていないのか、それとも有効期間内なのかをすぐに教えてくれます。
ログインフローを組み立てる際にも便利で、issuer・audience・subject がバックエンドの想定どおりか、サーバー側で追加した独自クレームが本当に payload に入っているかを確認できます。
例:3 つの部分を読む
eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.SflKx... のような形のトークンでは、最初のセグメントは {"alg":"HS256","typ":"JWT"} のような header に、2 番目は {"sub":"1234","iat":1700000000,"exp":1700003600} のような payload にデコードされ、3 番目は不透明な signature のまま残ります。デコーダーは数値の iat と exp をローカル時刻の日付に変換し、トークンがまだ有効なら失効までの残り時間も表示します。
注意点とエッジケース
デコードは検証ではありません。このツールは signature を秘密鍵や公開鍵と照合しないため、デコードできたトークンは「そう主張している」ことを示すだけで、その主張が信頼できることまでは保証しません。トークンをもとに何か処理する前には、必ずサーバー側で適切なライブラリを使って signature を検証してください。payload は Base64URL でエンコードされているだけなので、その中身はトークンを持つ人なら誰でも読めるものとして扱ってください。暗号化されているわけではありません。同じ理由から、自分の管理下にない本番トークンを貼り付けるのは避けましょう。また exp と nbf は秒単位の Unix タイムスタンプであり、だからこそ exp を過ぎた瞬間にトークンは失効として表示されます。