JWTデコーダー・検証について
JSON Web Token(JWT)は、ドットで区切られた3つのbase64urlの部分からなるコンパクトな文字列です。署名アルゴリズムを示すヘッダー、ユーザーIDや有効期限などのクレームを含むペイロード、そして署名でできています。最初の2つの部分は暗号化ではなくエンコードされているだけなので誰でもデコードできますが、鍵を持つ人が本当に発行したトークンかどうかは、署名を見なければわかりません。
このツールはヘッダーとペイロードをデコードし、exp、nbf、iatのタイムスタンプを読みやすい日時に変換して、トークンが期限切れかどうかを表示します。署名に使ったシークレットや発行者の公開鍵を貼り付ければ、署名の検証もできます。アクセストークンは実際のアカウントへのアクセスを許可するものなので、トークンと鍵がブラウザ内で処理され、サーバーに送信されないことは重要です。
使い方
- 「トークン」欄にトークンを貼り付けます。先頭の"Bearer "と改行は自動で取り除かれます。
- デコードされた「ヘッダー」と「ペイロード」を確認し、「クレーム」の表で発行者、サブジェクト、オーディエンス、有効期間を確かめます。
- 署名を確認するには、「署名を検証」に進みます。HS256、HS384、HS512の場合は共有シークレットを入力し、シークレットがbase64でエンコードされている場合は「シークレットはbase64エンコード済み」にチェックを入れます。
- RS、PS、ES、EdDSAのトークンの場合は、公開鍵をPEMブロック、X.509証明書、JWK、またはJWKS全体として貼り付けます。
- 「検証」をクリックします。署名が有効かどうかが結果に表示されます。
主な機能
- 読みやすいクレーム: 有効期限、有効開始、発行日時を、UTC、お使いのタイムゾーン、現在との差で表示し、状態もリアルタイムで更新します。
- 署名の検証: ブラウザのWeb Crypto APIを使い、HS256/384/512、RS256/384/512、PS256/384/512、ES256/384/512、EdDSA(Ed25519)に対応しています。
- 柔軟な鍵の入力: SPKI形式のPEM公開鍵、X.509証明書、単体のJWK、JWKセットを受け付けます。JWKセットではkidで鍵を選びます。
- わかりやすいエラーメッセージ: トークンの部分の数が違う、base64urlやJSONが正しくない、暗号化されたJWEである、といった問題を説明します。
- プライバシーを重視した設計: 何もアップロードも保存もされません。鍵はこのブラウザタブの中にだけあり、タブを閉じると消えます。
使用例
APIが401を返すのはなぜ?
失敗したリクエストのアクセストークンを貼り付けます。「クレーム」の表に「期限切れ」と、お使いのタイムゾーンでの有効期限が表示されるので、クライアントがトークンを更新していなかったことがわかります。
IDプロバイダーのIDトークンを確認する
プロバイダーのJWKS文書(jwks_uriで公開されているもの)をコピーして、鍵として貼り付けます。ツールがkidの一致する鍵を選び、RS256の署名を検証します。
HS256の連携をデバッグする
トークンと共有シークレットを貼り付けます。署名が一致しない場合は、一方ではシークレットがbase64でエンコードされ、もう一方ではプレーンテキストになっていないかを確認してください。
制限事項と注意点
- 暗号化されたトークン(5つの部分からなるJWE)は復号できません。
- JWKSのURLから鍵をダウンロードすることはありません。URLのJSONをコピーして貼り付けてください。
- PKCS#1の"BEGIN RSA PUBLIC KEY"ブロックには対応していません。先にSPKIの"BEGIN PUBLIC KEY"ブロックに変換してください。
- 検証で確認するのは署名だけです。発行者、オーディエンス、その他のクレームが受け入れられるかどうかは、お使いのアプリケーションによって決まります。
- 古いブラウザはEdDSA(Ed25519)に対応していないことがあります。鍵やアルゴリズムに対応していない場合は、ツールがそのことを表示します。
よくある質問
ここにトークンを貼り付けても安全ですか?
トークンはブラウザ内のJavaScriptでデコードされ、どこにも送信されません。それでも、本番環境のトークンはパスワードと同じように扱い、できるだけ期限切れのトークンやテスト用のトークンを使ってください。
JWTの内容は誰でも読めますか?
はい。ヘッダーとペイロードはbase64urlでエンコードされているだけです。JWTのペイロードに秘密情報を入れないでください。署名が防ぐのは改ざんであり、読み取りではありません。
「署名が無効です」とはどういう意味ですか?
トークンが署名の後に変更されたか、入力した鍵とは別の鍵で署名されています。正しいシークレット、またはヘッダーのkidに対応する公開鍵を使っているか確認してください。
トークンの検証に秘密鍵は必要ですか?
いいえ。RS、PS、ES、EdDSAのトークンは公開鍵で検証します。誤って貼り付けられないように、このツールは秘密鍵を受け付けません。
"alg": "none" のトークンが検証されないのはなぜですか?
そのようなトークンには署名がないため、確認するものがありません。サーバーは、明示的に想定している場合を除き、署名のないトークンを拒否すべきです。