jwt-decode について
jwt-decodeは、署名を検証せずにJWTの内容を確認するスキルです。クレームや時刻を表示し、複数のセキュリティ上の懸念を指摘します。署名の検証にはjwt-validateを使用します。
主な機能
- 01JWTヘッダーとペイロードのデコード
- 02生の署名文字列の表示
- 03トークン時刻のUTC変換
- 04一般的なセキュリティリスクの指摘
- 05ネストしたJWTの再帰デコード
活用シーン
- 01JWTのクレーム確認
- 02トークンの有効期限確認
- 03クレーム内の機密データ検出
- 04ネストしたJWTの確認
インストール
コマンドをコピーしてターミナルで実行します。
$
npx skills add https:/ / github.com/ jsonwebtoken/ jwt-skills --skill jwt-decodeインストール後、Claude Code で/jwt-decodeを入力して読み込まれたか確認します。
詳細
JWT のデコード
ヘッダーとペイロードを base64url デコードして JWT をデコードします。署名の検証は行いません。検証には jwt-validate を使用してください。
手順
- トークンを
.で分割し、3 つの部分(ヘッダー、ペイロード、署名)にします。 - 1 番目と 2 番目の部分を base64url デコードし、JSON として解析します。
- ヘッダー、ペイロード(すべてのクレームを含む)、生の署名文字列を表示します。
exp、nbf、iatについて、Unix タイムスタンプと人間が読める UTC 時刻の両方を表示します。expが過去の場合は、期限切れと経過時間を記載します。- セキュリティチェックを実行します(以下を参照)。
出力形式
## Header
{ "alg": "RS256", "typ": "JWT", "kid": "abc123" }
## Payload
{ "iss": "https://auth.example.com/", "sub": "user|12345", "exp": 1735689600 }
exp: 2025-01-01T00:00:00Z — EXPIRED (3 months ago)
iat: 2024-12-31T00:00:00Z
## Signature
Algorithm: RS256 | Signature: [base64url string]
(Not verified — use jwt-validate to verify)
セキュリティチェック
以下が見つかった場合は、目立つように警告します。
alg: none— トークンに署名がありません。「このトークンには署名がなく、信頼できません。誰でも作成または変更できます。」と警告します。これは既知の攻撃手法(CVE-2015-9235)であり、攻撃者が署名を取り除いて検証を回避します。- ペイロード内の機密データ — JWT は暗号化されず、エンコードされます。クレーム内にパスワード、シークレット、API キー、または PII が見つかった場合は警告します。
expの欠落 — トークンの有効期限がありません。セキュリティリスクとして警告します。- ヘッダー内の
jku/jwk/x5u— これらは、検証側をだまして攻撃者が制御するキーを取得させるために使われる可能性があります。存在する場合は警告します。
注意事項
ctyヘッダーが "JWT" の場合、ペイロードはネストされた JWT です。再帰的にデコードします。- デコードに失敗した場合は、具体的なエラー(不正な base64、無効な JSON、セグメント数の誤り)を報告します。
- このスキルで確認できるのはトークンの内容のみであり、真正性については何も判断できません。検証には
jwt-validateを案内してください。
コメント
Markdown 対応