本文へスキップ
OpsKit

JWT デコーダー

JWT を貼り付けるとヘッダーとクレームを表示します。有効期限と発行時刻を読みやすい日付に変換し、標準クレームの意味も併せて説明します。トークンがブラウザの外に出ることはありません。

すべてブラウザ内で処理されます. このページは静的ファイルです。入力した内容はタブの中だけに留まり、サーバーへ送信されることはなく、閉じれば消えます。実際のトークンや設定を貼り付けても安全です。

こんなときに使います

  • 401 が返るとき、トークンが期限切れなのか audience が違うのかを切り分けたいとき。
  • API を疑う前に、アクセストークンが実際にどの scope や role を持つか確認したいとき。
  • OIDC 連携のデバッグで発行者と鍵 ID を確認したいとき。

実例

一般的なアクセストークン

入力
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NSIsIm5hbWUiOiJKYW5lIiwiaWF0IjoxNzAwMDAwMDAwLCJleHAiOjE3MDAwMDM2MDB9.signature
結果
sub: 12345 · exp: 2023-11-14 23:13 UTC

ヘッダー・ペイロード・署名がドットで区切られています。

有効期限の読み方

入力
"exp": 1700003600
結果
2023-11-14 23:13 UTC

exp はミリ秒ではなく秒単位です。ミリ秒を入れると 55000 年になり、実際によくあるバグです。

危険なヘッダー

入力
{"alg":"none"}
結果
署名なしトークン

alg: none をそのまま受け入れるライブラリは偽造トークンを通します。サーバー側で期待するアルゴリズムを固定してください。

よくある間違い

ペイロードを非公開だと思う

JWT は署名されているだけで暗号化されていません。トークンを持つ人は、このページと同じようにすべてのクレームを読めます。機密情報を入れないでください。

デコーダーの有効表示を信じる

デコードは真正性を証明しません。完全に読めて、なおかつ完全に偽造されたトークンもあり得ます。判断できるのはサーバー側の署名検証だけです。

期限切れ問題を時計のずれと混同する

発行直後に期限切れになる場合は iat クレームとサーバーの時計を比べてください。数分のずれだけで正常なトークンが拒否されます。

よくある質問

トークンはどこかに送信されますか?

いいえ。このページは静的ファイルで、デコードはブラウザ内の Base64 と JSON パースだけで行われます。記録も送信もされず、ネットワークパネルで確認できます。

なぜ署名が有効かどうかは分からないのですか?

検証には署名シークレットか発行者の公開鍵が必要です。本番の署名鍵を Web ページに貼り付ける習慣は、それで得られる利便性よりはるかに大きな危険を招きます。

exp と nbf の違いは何ですか?

exp はトークンが受け入れられなくなる時刻、nbf は受け入れられ始める時刻です。先に発行されたトークンは nbf が未来のことがあり、それまでは拒否されます。

関連ツール