JWT デコード・生成
JSON Web Tokenを貼り付けると、ヘッダーとクレームの中身、有効期限、署名が正しいかを確認できます。トークンはこのページの外に出ません。
このツールを自分のサイトに埋め込む
コードをコピーしてページのHTMLに貼り付けてください。無料です。クレジットのリンクは残してください。
JWTのしくみ
JSON Web Token(RFC 7519)は、Base64URLでエンコードした3つの文字列をドットでつないだものです(header.payload.signature)。ヘッダーには署名アルゴリズム、ペイロードにはユーザーIDや権限、有効期限などのクレームが入り、署名は前の2つから計算されます。
HS256の署名は共有シークレットによるHMACで、同じシークレットで署名も検証もします。RS256・PS256・ES256は秘密鍵で署名し公開鍵で検証するため、多くのサービスが「検証はできるが発行はできない」状態でトークンを確認できます。
安全にトークンを扱うには
- 署名の検証は必ずサーバー側で行い、alg が "none" のトークンは拒否する。
- 使うアルゴリズムはサーバー側で固定し、トークンのヘッダーに選ばせない。
- exp・nbf・iss・audを確認する。時計のずれは1〜2分程度の猶予を持たせる。
- 有効期限は短くし、トークンはパスワードと同じように扱う。このデコーダーはオフラインで動きますが、サーバーに送信するサイトも多くあります。
JWTの登録済みクレーム(RFC 7519)
| クレーム | 名称 | 意味 |
|---|---|---|
iss | 発行者 | トークンを作成・署名した主体 |
sub | 主体 | トークンの対象。通常はユーザーID |
aud | 対象者 | トークンを受け取るべき相手 |
exp | 有効期限 | この時刻(1970年からの秒数)以降は拒否する |
nbf | 有効開始 | この時刻より前は拒否する |
iat | 発行日時 | 作成された時刻 |
jti | JWT ID | 使い回しを防ぐための一意のID |
よくある質問
JWTの中身は誰でも読める?
読めます。ヘッダーとペイロードはBase64URLでエンコードされているだけで暗号化されていないため、トークンを持っている人なら誰でも読めます。パスワードや秘密情報は絶対にペイロードに入れないでください。
デコードできればJWTは正しい?
いいえ。デコードは中身を読むだけです。改ざんや偽造がないことは、正しいシークレットまたは公開鍵で署名を検証して初めてわかります。サーバー側ではさらにexp・nbf・audも確認が必要です。
発行したばかりなのに期限切れになるのは?
exp・iat・nbfは1970年からの「秒」で、ミリ秒ではありません。JavaScriptのDate.now()(ミリ秒)を1000で割らずに使うと数万年先の日付になり、サーバー間の時計のずれがあると新しいトークンが期限切れや有効前に見えることがあります。
貼り付けた内容はサーバーに送られる?
送られません。このツールはJavaScriptとブラウザ内蔵のWeb Crypto APIだけで、すべて端末の中で動きます。入力・貼り付け・読み込んだ内容がアップロードや保存されることはありません。