UltKit

JWTデコーダー

JSON Web Tokenを貼り付けると、ヘッダーとペイロードを整形済みのJSONで表示します。有効期限と発行時刻は日時に変換され、トークンが現在有効かどうかも確認できます。デコードはすべてブラウザ内で行われるため、実際に使用中の認証情報であるトークンも安心して扱えます。

0 文字 · 0 語 · 0 行

0 文字 · 0 語 · 0 行

すべてこのブラウザのタブ内で処理されます。テキストがアップロードされたり保存されたりすることはありません。

登録済みクレーム

RFC 7519 §4.1 で定義されている7つのクレーム名です。すべて任意で、時刻は 1970-01-01 UTC からの秒数です。

クレーム意味
iss発行者:トークンを作成し署名した主体
sub主体:トークンの対象となるユーザーまたはエンティティ
aud受信者:トークンの宛先
exp有効期限:この時刻以降はトークンを拒否
nbf有効開始時刻:この時刻より前はトークンを拒否
iat発行時刻:トークンが作成された時刻
jtiJWT ID:リプレイ攻撃防止に使う一意の識別子

よく使われる alg の値

alg の値意味
HS256SHA-256 を使う HMAC。1つの共有秘密鍵で署名と検証を行う
RS256SHA-256 を使う RSA PKCS#1 v1.5 署名。秘密鍵で署名し、公開鍵で検証
PS256SHA-256 を使う RSA-PSS
ES256P-256 曲線上の ECDSA と SHA-256。署名が短い
EdDSAEd25519 または Ed448 の署名
none署名なしのトークン。サーバーは拒否すべきです

JSON Web Tokenの構造

JWTはRFC 7519(2015年5月)で定義されており、英語の「jot」のように発音することが推奨されています。一般的な署名付きの形式は、ドットでつないだ3つのBase64url文字列(header.payload.signature)です。ヘッダーにはalgで署名アルゴリズム(HS256やRS256など)が、kidで鍵IDが指定されていることもあります。ペイロードにはクレームが入ります。クレームはJSONのフィールドで、sub(ユーザー)、iss(発行者)、aud(想定される受信者)、そして1970年1月1日 UTCからの秒数で表されるexp、nbf、iatなどがあります。このデコーダーはこれらをローカル時刻とISO 8601に変換し、トークンが期限切れか、まだ有効でないか、有効期間内かを表示します。

Base64urlはエンコードであって暗号化ではないため、トークンを持っている人なら誰でも、このページと同じようにペイロードを読めます。パスワードやカード番号などの秘密情報は、クレームに入れないでください。ドットで区切られた5つの部分からなるトークンはJWE(暗号化トークン)で、鍵がなければ内容を読めません。その場合はデコーダーがその旨を表示します。Authorizationヘッダーからコピーした先頭の「Bearer 」は自動的に取り除かれます。

ここで署名を検証しない理由

署名は、ヘッダーとペイロードが鍵の保持者によって作られ、その後に改ざんされていないことを証明するものです。検証にはその鍵が必要で、HS256などのHMAC系アルゴリズムでは共有シークレット、RS256、ES256、EdDSAでは発行者の公開鍵を使います。本番の署名シークレットをWebページに貼り付けるのは避けるべきですし、鍵なしでトークンを保証するかのように見せるデコーダーは誤った安心感を与えます。そのため、このツールは署名を表示しますが検証はしません。表示される内容は事実ではなく、トークンが主張している内容として扱ってください。

検証はサーバー側で、メンテナンスされているライブラリを使い、想定するアルゴリズムを固定して行うべきです。過去の代表的な2つの失敗がその理由です。1つはalg「none」を受け入れてしまい、誰でも署名なしのトークンを偽造できる問題。もう1つはアルゴリズム混同で、RS256を想定しているサーバーが、公開鍵をHMACのシークレットとして使うHS256署名を検証させられてしまう問題です。デコーダーはデバッグ用です。プロバイダーがどんなクレームを発行しているかの確認、audの間違いの発見、exp が1分前に過ぎたせいでセッションが失敗したと突き止める、といった用途に向いています。Base64urlの各セグメントをそのまま読みたい場合は、Base64デコーダーをご利用ください。

よくある質問

本物のアクセストークンをJWTデコーダーに貼り付けても安全ですか?
このページでは、トークンがブラウザの外に送信されることはありません。ただし有効なトークンは期限が切れるまでパスワードと同じように使えるため、期限切れやテスト用のトークンを使い、本番のトークンはスクリーンショットやチャットに載せないでください。
発行したばかりのトークンが期限切れと表示されるのはなぜですか?
まず端末の時計を確認してください。アクセストークンの有効期間が数分しかない発行元もあり、ログからコピーしたトークンは見た目より古いことがあります。expを秒ではなくミリ秒で書いた場合は逆に、数千年先の日付になります。
JWTのペイロードは他人に書き換えられますか?
編集して再エンコードすることはできますが、署名が一致しなくなります。正しい鍵とアルゴリズムで署名を検証するサーバーは、改ざんされたトークンを拒否します。
JWSとJWEの違いは何ですか?
JWS(RFC 7515)は署名付きで3つの部分からなり、誰でも読めます。JWE(RFC 7516)は暗号化されていて5つの部分からなり、ペイロードを読めるのは鍵の保持者だけです。
ログアウトするとJWTは無効になりますか?
それだけではできません。サーバーが拒否リストを持つか、セッション記録を確認しない限り、署名付きJWTはexpまで有効なままです。そのためアクセストークンの有効期間は通常短く設定されます。