JWT(JSON Web Token)を貼り付けると、ヘッダーとペイロードを読みやすいJSONに戻し、exp(有効期限)を日本時間に直して期限切れかどうかを判定します。署名の検証はしません。トークンはブラウザの中だけで処理し、外部に送りません。
| 名前 | 値 |
|---|
JWT(JSON Web Token、「ジョット」とも読みます)は、ログインした利用者の情報や権限を、改ざんを検出できる形で受け渡すための文字列です。OAuth 2.0のアクセストークンやOpenID ConnectのIDトークン、APIのAuthorization: Bearerヘッダーなどでよく使われます。中身は暗号化されておらず、Base64URLで書き換えたJSONなので、デコードすれば誰でも読めます。
このツールは、貼り付けたJWTをヘッダー・ペイロード・署名の3つに分けて色分けし、ヘッダーとペイロードを整形したJSONで表示します。exp・iat・nbfなどの時刻をUnix時刻から日本時間に直し、「あと何分で切れるか」「何日前に切れたか」を1秒ごとに更新します。「APIが401を返すのはトークンの期限切れのせいか」「audやscopeは想定どおりか」を確かめたいときに使えます。
Bearer やAuthorization:、前後の空白・改行・引用符は自動で取り除きます。nbfより前)かを確かめます。サーバーが時計のずれを許容している場合は、「時計のずれの許容」に秒数を入れると同じ条件で判定できます。iss・sub・audなどの各項目が何を表すかを確かめます。時刻のクレームは日本時間と相対時間も並べて表示します。alg)と署名の長さが合っているかを確かめます。JWTは「読める」もの。ペイロードは暗号化ではなくエンコードされているだけなので、パスワードや個人情報など、見られて困るものを入れてはいけません。暗号化したいときはJWE(5つの部分に分かれる形式)を使います。このツールにJWEを入れると、ヘッダーだけを表示し、中身は暗号化されていると知らせます。
時刻は秒単位のUnix時刻。RFC 7519ではexpなどを1970年1月1日(UTC)からの秒数で書くと決めています。JavaScriptのDate.now()はミリ秒なので、ミリ秒の値を入れてしまう実装ミスがときどきあります。このツールは、値が大きすぎてミリ秒と思われるときに注意を出します。また、RFCではexpの時刻ちょうどを過ぎたら受け付けないとしているので、expと同じ秒になった時点で「期限切れ」と表示します。
署名の長さで方式の見当がつく。HS256の署名は32バイト(Base64URLで43文字)、ES256は64バイト(86文字)、RS256とPS256は鍵の長さと同じで、2048ビットの鍵なら256バイト(342文字)です。algと長さが合わないときは、トークンが途中で切れているか、別の方式で署名されている可能性があります。
algがnoneのトークンに注意。署名なしのJWTで、受け付けてしまうサーバーは誰でも偽のトークンを作れてしまいます。サーバー側では、受け付けるalgを決め打ちにするのが定石です。