メインコンテンツへ移動

署名は検証しません — ローカルインスペクターのみです。トークンはブラウザから出ません。

上にトークンを貼り付けると、ヘッダーとペイロードをローカルでデコードして表示します。

JWTをデコードして署名を検証する方法

JWT Decoder は JSON Web Token をヘッダーとペイロードに分け、クレームを整形し、数値のタイムスタンプを読める日付に変換して、トークンが失効しているかを一目で示します。デコードはこのブラウザーのタブ内で行われるため、トークンとそれが与える権限がサーバーへ送られることはありません。鍵が手元にあれば、同じページで Web Crypto API を使って署名まで検証でき、クレームを無条件に信じる必要がなくなります。

4ステップでトークンをデコードし検証する

  1. トークンを貼り付けるトークン入力欄に JWT を貼り付けるか、例を読み込むを押してデモトークンで動作を確かめます。ドットで区切られた Base64url の3区画でない値は、途中までデコードせずに不正なトークンとして報告されます。
  2. ヘッダーとペイロードを読むヘッダーにはアルゴリズムとトークン種別、ペイロードには整形された JSON としてクレームが表示されます。標準の時刻クレームは元の値と並べて日付でも示されるので、iat・exp・nbf をそのまま読めます。
  3. 有効性バッジを確認するバッジが現在の有効期間内かを要約します。有効、失効、まだ有効でないのいずれかです。デコード専用モードではクレームに未検証の印が付きます。署名を確かめない読み取りは、トークンが何を主張しているかしか示さないからです。
  4. 鍵があれば署名検証モードに切り替える検証モードを選び、鍵を貼り付けます。HS256 は共有秘密鍵を受け取り、選んだエンコーディングに応じて UTF-8 か Base64 として解釈します。RS256・PS256・ES256 は公開鍵を JWK オブジェクトまたは PEM 形式の SPKI ブロックで受け取ります。結果は検証済み、署名不一致、無効な鍵、許可されないアルゴリズムとして示されます。

JWT Decoder の使いどころ

  • APIが401を返す原因を突き止めるクライアントが実際に送ったトークンをデコードし、exp を現在時刻と比べたり、aud や scope のクレームが API の期待どおりかを確認します。
  • IDプロバイダーが発行した内容を確かめるログイン連携の実装中に、OIDC の ID トークンのクレーム — 発行者、サブジェクト、nonce、ヘッダーのアルゴリズム — を確認します。
  • 連携レビューで署名を検証する提供元の公開 JWK を貼り付け、そのトークンが信頼するよう指示された鍵で、想定したアルゴリズムで署名されているかを確かめます。
  • 本番のトークンを漏らさずに調べるJWT は持っているだけで権限になる資格情報です。デコードがローカルで動くため、問い合わせに添付された実物のトークンでも、入力を記録する外部サービスに貼らずに確認できます。

JWT Decoder のよくある質問

デコードするときトークンはどこかへ送られますか?
いいえ。デコードも検証もブラウザーのタブ内で実行され、トークンは記録も保存もされません。画面に見えている部分だけがトークンを保持します。
デコードできればトークンは正当だと言えますか?
いいえ。ペイロードに何でも書いたトークンは誰でも作れます。デコードはクレームを見せるだけで、正しい鍵で署名を検証して初めて本物だと分かります。だからこそ検証前のクレームには未検証の印が付きます。
検証できるアルゴリズムは何ですか?
HS256、RS256、PS256、ES256 です。ヘッダーがそれ以外のアルゴリズムを示すトークンは、弱い方法で検証せず許可されないものとして拒否します。
検証に必要な鍵の形式は?
HS256 は共有秘密鍵をテキストで受け取り、エンコーディングの選択に従って UTF-8 か Base64 として解釈します。RS256・PS256・ES256 は公開鍵を JWK の JSON オブジェクトか PEM 形式の SPKI 公開鍵ブロックで受け取ります。
ヘッダーのjkuやx5uから鍵を取得しますか?
いいえ。ヘッダーにある遠隔の鍵 URL を要求することはありません。鍵は貼り付けたものだけを使うため、悪意あるトークンが自分の管理する鍵へ検証を誘導することはできません。
トークンの作成や再署名はできますか?
できません。このページは既存のトークンを調べて検証するだけで、発行・編集・更新は行いません。
失効日時がおかしく見えるのはなぜですか?
exp・iat・nbf はミリ秒ではなく Unix 秒です。ミリ秒の値を入れると遠い未来の日付として解釈され、多くの場合は発行側が 1000 を掛け間違えている可能性が高いです。