JWT デコーダ
JWT (JSON Web Token) を header / payload / signature の 3 部に分解してデコード表示します。標準クレーム (iss / sub / aud / iat / nbf / exp) のラベル補足と有効期限判定にも対応。鍵をクライアントに置けないため署名検証は行いません。
注目クレーム
よく使う組み合わせ
直近の入力
履歴はあなたのブラウザにのみ保存されます。サーバーに送信されません。 設定
こんなときに使う
API レスポンスで返ってきたトークンの中身を確認する
OAuth / OIDC のフローで取得した access_token や id_token の payload を見て、scope や sub が想定通りか確認します。
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c exp(有効期限)切れかチェックする
401 が返るときに、トークンが期限切れなのか別の理由なのかを切り分けます。本ツールは exp を Unix 時刻からローカル時刻に変換して期限切れかも併せて表示します。
ID プロバイダから期待した claim が含まれているか確認する
Auth0 / Cognito / Keycloak などのカスタムクレーム(roles / groups など)が想定通りに乗っているかを目視確認します。
ライブラリ越しではなく直接トークンを見る
認証ライブラリが裏でトークンを取り扱う場合、生のトークン文字列を直接デコードして問題を切り分けます。
アルゴリズム(alg)の確認
header の alg が HS256 / RS256 / ES256 のどれか、あるいは none になっていないかを確認します。none は脆弱性の元になるためアラート対象です。
kid(鍵 ID)から JWKS のどの鍵で検証すべきかを把握する
header の kid を見て、IdP の jwks_uri から対応する公開鍵を引きにいく流れに使えます。
よくあるエラーと対処
JWT は header.payload.signature の 3 部構成です(現在 N 部) - 原因
- 貼り付けた文字列にドット . が 2 個含まれていません。コピーミスや改行混入が原因のことが多いです。
- 対処
- 全文を空白・改行を除いた 1 行で貼り直してください。Bearer プレフィックスが付いていれば外します。
デコードエラー: Invalid character - 原因
- Base64Url のデコードに失敗しています。トークンが改行で切れている、ヘッダや payload に Base64Url 以外の文字が混入している等。
- 対処
- トークンの完全な文字列を貼り直してください。URL エンコードされている場合は事前にデコードします。
exp が期限切れと表示されるが API は通る - 原因
- サーバ側のクロックスキュー許容(leeway)で許されている、もしくは別のトークンが使われている可能性があります。
- 対処
- 実際にリクエストに乗っているトークンを確認してください。SDK のキャッシュやリフレッシュ周期にも要注意です。
payload が JSON として表示されない - 原因
- Base64Url デコードはできたが、結果が JSON ではないトークン(独自形式)です。
- 対処
- 本ツールは標準 JWT を前提としています。仕様(OIDC / RFC 7519)に従っているか確認してください。
CLI / 他言語でやる方法
echo $TOKEN | cut -d. -f2 | base64 -d | jq . URL-safe を考慮するなら tr '_-' '/+' でパディング補正後にデコード。
python -c "import jwt; print(jwt.decode(t, options={'verify_signature': False}))" verify_signature=False で署名検証スキップ。
node -e "console.log(require('jsonwebtoken').decode(token, {complete: true}))" decode は検証なし。検証は verify を使う。
よくある質問
▶ 署名検証はできますか?
▶ JWT はどう構造化されていますか?
▶ どんなアルゴリズムが alg に来ますか?
▶ iat / nbf / exp の単位は?
▶ audience(aud)が配列のときは?
▶ 貼ったトークンが第三者に渡る心配はありますか?
▶ JWE(暗号化された JWT)には対応していますか?
▶ リフレッシュトークンも JWT ですか?
もっと深く知る
書籍
公式ドキュメント / 仕様
学習サイト / 記事
※ Amazon へのリンクはアフィリエイトリンク(Amazon アソシエイト)を含みます。