Restring

JWTデコード・解析

JWTをブラウザ上で分解し、Header・Payload・署名を確認できる解析ツール。認証トークンのクレーム確認、有効期限調査、HMAC署名検証に使える。

使い方

  1. JWT文字列を入力する。
  2. HeaderとPayloadのJSONを確認する。
  3. exp、nbf、iatなどの時刻クレームと有効期限状態を確認する。
  4. HS256、HS384、HS512の場合はHMAC秘密鍵を入力して署名一致を確認する。

JWT解析

署名検証: 検証待ち

有効期限 exp4102444800 (2100-01-01T00:00:00.000Z)
発行時刻 iat1516239022 (2018-01-18T01:30:22.000Z)
期限状態期限内
{
  "alg": "HS256",
  "typ": "JWT"
}
{
  "sub": "1234567890",
  "name": "Restring",
  "iat": 1516239022,
  "exp": 4102444800
}
lSacD8mcneUOosKS6cU2e_oVWy5cNGp4d6eYWNyLbQw

こんな用途に

  • 認証トークンの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 3
python3 -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などの時刻クレームを読み取り、有効期限状態の確認に使える。