JWT デコーダー / エンコーダー
JWTトークンを即座にデコードして分析するか、署名付きJWTを生成します。完全クライアントサイド処理。
すべての処理はブラウザ内で完結します。データはサーバーに送信されません。
JWT(JSON Web Token)とは?
JWT(JSON Web Token)は、当事者間でJSONオブジェクトとして情報を安全に送信するためのオープン標準(RFC 7519)です。Webアプリケーションの認証や情報交換に広く使われています。JWTはBase64URLエンコードされているだけで暗号化ではないため、誰でもペイロードをデコードできます。暗号化なしで機密情報をJWTに含めないでください。
JWTの構造
例
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
HeaderPayloadSignature
Header
トークンの種類(typ)と署名アルゴリズム(alg、例:HS256、RS256)を含みます。
Payload
クレーム(Claims)を含みます。ユーザー情報と有効期限(exp)、発行日時(iat)、主体(sub)などのメタデータが格納されます。
Signature
ヘッダーとペイロードをシークレットキーで署名した値です。トークンが改ざんされていないことを検証するために使用されます。
主なクレーム
| Claim | 主なクレーム |
|---|---|
| iss | 発行者 |
| sub | 主体(ユーザーID) |
| aud | 受信者 |
| exp | 有効期限 |
| iat | 発行日時 |
| nbf | 有効開始日時 |
| jti | JWT 固有ID |
よくある質問
JWTは暗号化されていますか?
いいえ。一般的なJWT(JWS)は署名されているだけで、暗号化はされていません。ペイロードはBase64URLエンコードされており、誰でもデコードできます。パスワードなどの機密情報をJWTペイロードに含めないでください。
署名の検証にシークレットキーが必要なのはなぜですか?
HMACベースの署名(HS256など)は共有シークレットを使用します。シークレットがなければ署名が正当かどうか確認できません。ペイロードのデコードと署名の検証は別の操作です。
expクレームがない場合、有効期限はありませんか?
exp がない場合、トークン自体は失効しません。サーバー側でトークンブロックリストなどの失効メカニズムを実装する必要があります。
HS256とRS256の違いは何ですか?
HS256は全当事者が共有する対称シークレットキーを使用します。RS256は非対称鍵ペア(秘密鍵で署名、公開鍵で検証)を使用し、マイクロサービスやサードパーティ検証に適しています。
JWTはどこに保存すべきですか?
XSS攻撃を防ぐHttpOnlyクッキーが推奨されます。localStorageへの保存は便利ですがXSSに脆弱です。
リフレッシュトークンとは何ですか?
リフレッシュトークンは、アクセストークンが期限切れになった後、再ログインなしで新しいアクセストークンを取得するための長期トークンです。
貼り付けたJWTはサーバーに送信されますか?
いいえ。すべてのデコードとエンコードはブラウザ内のJavaScriptのみで処理されます。サーバーには何も送信されません。