ssecutils

🪪 JWT Decoder

JWT(JSON Web Token)をHeader / Payload / Signatureに分解して可視化し、HMAC / RSA / ECDSA / RSA-PSS で署名検証もできます。 すべてブラウザ内(SubtleCrypto)で処理され、トークン・キーはサーバーに送信されません。

💡 JWTについて

  • JWTは Header.Payload.Signature の3パート構成で、各パートはBase64URLでエンコードされています。
  • Payloadは暗号化されていません。誰でもデコードして中身を読めるため、機密情報を含めないでください。
  • 署名(Signature)は改ざん検知のためのもので、ペイロードの秘匿には使えません。
  • HMAC(HS*)は対称鍵で署名・検証も同じシークレットを使います。RSA / ECDSA / RSA-PSS は公開鍵で検証のみ行います(秘密鍵は不要)。
  • alg: none のJWTは署名なしで受け入れる脆弱性の温床になるため、検証側で必ず拒否すべきです。本ツールも未対応です。
  • ECDSA署名はJWS仕様(RFC 7515)に従い R||S 連結形式で扱います(DER形式ではない)。

📖 関連する解説記事

使い方と解説

JWTの中身・期限・署名を確認する

JWT Decoder は、JWTを Header、Payload、Signature に分解し、exp や iat などのクレームを読みやすく表示するツールです。ログイン不具合、認可エラー、トークン期限切れの調査に役立ちます。

入力データの扱い

JWTや検証キーはブラウザ内で処理され、サーバーへ送信されません。実トークンを扱う場合でもローカルで確認できます。

JWTデコードで確認できること

JWTのPayloadは暗号化されていないことが多く、Base64URLデコードで中身を確認できます。ユーザーID、権限、issuer、audience、有効期限などを見て、アプリ側の期待値と一致しているか確認できます。

署名検証の考え方

署名はトークンの改ざん検知に使われます。HS256では共有シークレット、RS256やES256では公開鍵を使って検証します。Payloadを読めることと、署名が正しいことは別の問題です。

作って気づいたJWTの制約

JWTはヘッダー・ペイロード・署名を1つにまとめられて便利な反面、セッションIDのような短い値に比べて通信量が増えやすい点や、一度発行すると簡単には無効化できない点は、このツールを作りながら改めて実感しました。「ステートレスだから便利」の裏にある制約です。Decoderを作る前はJWTを単純に「安全な認証トークン」くらいに考えていましたが、実際にはどう発行し、どこに保存し、どう失効させるかまで含めて考えるものだと理解が変わりました。この記事の実例(正規署名済みトークンと、algをnoneに書き換えた偽造トークン)は実際にこのDecoderへ貼り付けて動作検証したもので、後者を試すと「未対応・検証不可」と表示されます。

JWT Decoder でできること

  • Header、Payload、Signatureを分割表示
  • exp、nbf、iatなどの時刻クレームを読みやすく変換
  • HMAC、RSA、ECDSA、RSA-PSSの署名検証に対応
関連ツール

次に使うツール

作業の流れに近いツールへすぐ移動できます。

解説記事

このツールに関連する解説記事

すべての記事 →