tomai
ログイン
無料 · 開発者ツール

JWT デコーダー・検証ツール

JSON Web Token をデコードし、HS/RS/ES/PS 署名を検証 —— すべてブラウザ内で完結

エンコード済みトークン
HEADER
PAYLOAD

JWTデコーダーとは?

JWT(JSON Web Token)は、現代のWebアプリで認証・認可に使われる3つの部分(ヘッダー、ペイロード、署名)からなるトークンです。ペイロードにはユーザー情報や有効期限などのデータが入っていますが、デコードするまでは意味不明なbase64の羅列にしか見えません。このツールはヘッダーとペイロードを読みやすいJSONに変換し、expやnbf、iatといった登録済みクレームを平易な言葉と実際の日付で説明し、トークンが期限切れ・有効・未有効のどれかをバッジで示します。署名の検証も可能で、HS256/384/512は共有シークレット、RS/PS/ESはPEM公開鍵で行います。すべてブラウザ内のWeb Cryptoで処理されるため、本番トークンをサードパーティのサイトに貼り付ける習慣から解放されます。

このツールでできること

  • 📖 ヘッダーとペイロードを整形済みJSONにデコード
  • 🏷️ 登録済みクレームを日本語でわかりやすく説明
  • ⏳ exp・nbf・iatを正確な日時と相対時間で表示
  • ✅ シークレットによるHS256/384/512署名の検証
  • 🔏 PEM公開鍵によるRS/PS/ES署名の検証
  • 🚦 期限切れ・有効・未有効のステータスバッジ
  • ⚠️ algがnoneの無防備なトークンに警告を表示

こんなときに役立つ

  • ログインフローで401エラーが出る原因を調べるとき
  • トークンが突然使えなくなった理由を確認するとき
  • 第三者IdPが発行したトークンを信頼する前に検証するとき
  • リフレッシュトークンの中身を調べるとき

プライバシー:トークンと鍵はすべてブラウザ内で処理され、アップロードされることはありません。本番の認証情報を貼り付けても安心です。

3つのセグメントの実際の意味

JWT は、ドットで区切られた3つの base64url エンコーディングされたセグメントから構成されます:

  • ヘッダーは署名アルゴリズムを指定し、ペイロードはクレームを格納し、署名は秘密鍵または公開鍵を用いてヘッダーとペイロードを結びつけます。
  • ヘッダーおよびペイロード内のデータは暗号化されておらず、トークンを所持する誰でもすべてのクレームを読み取れます。これは設計上の意図であり、JWT は「安全な」コンテナではなく、単に署名済みのコンテナです。
  • 検証には署名鍵が必要であり、これはサーバー側で実行されます。本ページではローカルでデコードを行うため、トークンを外部のリモート先に送信することなくクレームを確認できます。

デコードは検証ではありません

クレームが実際の日付に

ヘッダーとペイロードは読みやすい JSON で表示され、exp・nbf・iat などの登録済みクレームは実際の日付になり、有効期限切れ・有効・まだ無効の判定が明確に示されます。

🔒

HS・RS・PS・ES の検証

HS256/384/512 は平文または base64 の共有シークレットで、RS・PS・ES トークンは PEM 公開鍵で検証できます。すべてページ内の Web Crypto で処理されます。

🎯

不正なトークンを明確に説明

ドット欠落、無効なヘッダー、読めないペイロードといった構造上の問題を正確に報告し、none アルゴリズムを主張するトークンは信頼せず警告します。

よくある質問

トークンはサーバーに送信されますか?

いいえ。デコードと署名検証はすべてブラウザの Web Crypto API で完結します。トークン・秘密鍵・公開鍵はデバイスから出ないため、本番トークンも安全に確認できます。

検証できる署名アルゴリズムは?

共有秘密鍵による HS256/384/512(UTF-8 または base64url)と、非対称の RS256/384/512・PS256/384/512・ES256/384/512(PEM 公開鍵を貼り付け)に対応します。非対称トークンには公開鍵のみが必要で、秘密鍵は不要です。

JWT は暗号化されていません。どういう意味ですか?

標準の JWT は base64url エンコードされ署名されているだけで、暗号化はされていません。誰でも Payload を読めます。JWT に機密情報を入れないでください。署名は、鍵を持たない者による改ざんがないことのみを保証します。

署名が無効と表示されますが、トークンは改ざんされていますか?

通常は、以下の3つのつまらない原因のいずれかです:トークンが別の環境のシークレットで署名されていた、発行者がキーをローテーションし、あなたのキーが古くなっていた、あるいはヘッダー内のアルゴリズムがバックエンドの検証器が期待するものと一致していなかった(いわゆる <code>alg=none</code> テクニック)です。まずここでヘッダーをデコードし、その後、実際のバックエンドで使用しているキーと比較してください。

関連ツール

関連ツール