JWTデコード・解析
JWTをブラウザ上で分解し、Header・Payload・署名を確認できる解析ツール。認証トークンのクレーム確認、有効期限調査、HMAC署名検証に使える。
JWT
177文字
デコード結果(署名未検証)
署名を検証せずにBase64URLデコードした内容。改ざんされていないことは保証されない。
alg: HS256typ: JWT
- 有効期限 exp
4102444800 (2100-01-01T00:00:00.000Z)ローカル: 2100/1/1 0:00:00 UTC- 発行時刻 iat
1516239022 (2018-01-18T01:30:22.000Z)ローカル: 2018/1/18 1:30:22 UTC- 期限状態
- 期限内
Header
{
"alg": "HS256",
"typ": "JWT"
}Payload
{
"sub": "1234567890",
"name": "Restring",
"iat": 1516239022,
"exp": 4102444800
}Signature
lSacD8mcneUOosKS6cU2e_oVWy5cNGp4d6eYWNyLbQw
署名検証(HMAC)
HS256 / HS384 / HS512に対応。秘密鍵はブラウザ内でのみ使用し、送信・保存しない。
署名検証: 検証待ち
使い方
- JWT文字列を入力する。
- HeaderとPayloadのJSONを確認する。
- exp、nbf、iatなどの時刻クレームと有効期限状態を確認する。
- HS256、HS384、HS512の場合はHMAC秘密鍵を入力して署名一致を確認する。
こんな用途に
- 認証トークンのHeader、Payload、Signatureを分解したいとき。
- exp、nbf、iatなどの時刻クレームを確認したいとき。
- HS256などHMAC署名が期待通りか検証したいとき。
仕組み
- JWTをドット区切りでHeader、Payload、Signatureへ分割。
- HeaderとPayloadをBase64URLデコードし、JSONとして整形表示。
- HMAC系アルゴリズムはWeb Crypto APIで署名を再計算し、JWT内の署名と比較。
- RS256やES256など公開鍵方式の署名検証は未対応。
確認ポイント
- JWTのPayloadはデコードできても署名検証なしでは信頼できない。
- 秘密情報を含む本番トークンは扱いに注意し、必要な範囲だけ確認する。
手元でやるには
HeaderとPayloadをデコード
必要環境: Python 3python3 -c 'import base64,json,sys; t=sys.stdin.read().strip().split("."); dec=lambda s: json.dumps(json.loads(base64.urlsafe_b64decode(s+"="*((4-len(s)%4)%4))),ensure_ascii=False,indent=2); print("Header:\n"+dec(t[0])+"\nPayload:\n"+dec(t[1]))'HS256署名を検証
必要環境: Python 3、HMAC秘密鍵python3 -c 'import base64,hmac,hashlib,sys; token=sys.stdin.read().strip(); secret=b"secret"; h,p,s=token.split("."); sig=base64.urlsafe_b64encode(hmac.new(secret,f"{h}.{p}".encode(),hashlib.sha256).digest()).decode().rstrip("="); print("署名一致" if sig==s else "署名不一致")'よくある質問
JWTをデコードすると署名検証も済む?
デコードだけでは署名検証にならない。HMAC系は秘密鍵を入力した場合に署名一致を確認できる。
期限切れJWTを確認できる?
exp、nbf、iatなどの時刻クレームを読み取り、有効期限状態の確認に使える。