JWTを貼り付けると、ヘッダーとペイロードをデコードして整形表示します。有効期限(exp)や発行時刻(iat)も日時で表示。すべて端末内で処理し、署名の検証は行いません(秘密鍵は不要)。
使い方(3ステップ)
1
JWTを貼るheader.payload.signature 形式のトークンを貼り付けます。
2
デコードヘッダーとペイロードが整形表示されます。
署名の「検証」をしていないことの意味
この画面がやっているのはデコードだけです。署名が正しいかどうかは確認していません。これは機能不足ではなく、できないことです。
署名の検証には鍵が要ります。鍵はサーバー側で秘密に保つものなので、ブラウザで動くツールに渡すべきものではありません。ここで中身が読めたからといって、そのトークンが本物である保証はどこにもない。
裏を返せば、鍵がなくても誰でも中身を読めるということでもあります。JWTは暗号化されておらず、Base64URLで符号化されているだけ。パスワードや個人情報をペイロードに入れてはいけないのは、このためです。
貼り付けたトークンは端末の外に出ません。デコードはすべてブラウザ内で処理しています。ただし一般論として、本番環境の有効なトークンをオンラインのツールに貼るのは避けるべき習慣です。処理がどこで行われるかを確認してから使ってください。この画面を信用してほしいのではなく、確認する癖のほうを持ってほしい。
デバッグで最初に見るところ
- exp(有効期限):「ログインできない」の原因は、単なる期限切れであることが最も多い。Unix時間で入っているので、日時に直して現在時刻と比べてください。
- ヘッダーの alg:サーバーが期待するアルゴリズムと一致しているか。
none を許可する実装は攻撃対象になります。
- aud / iss:自分向けのトークンか、想定した発行者か。マイクロサービス間で取り違えると、認証は通るのに権限が合わない状態になります。
- サーバーの時計:数分ずれているだけで、有効なトークンが期限切れと判定されます。これはトークン側を見ても分かりません。
扱い方をもう少し詳しく
よくある質問
署名は検証されますか?
いいえ。中身の確認用で、署名検証は行いません(秘密鍵を扱わないため安全です)。本番の検証はサーバー側で行ってください。
トークンは送信されますか?
いいえ。デコードはすべて端末内(ブラウザ)で行い、トークンは送信されません。
日本語を含むペイロードも読めますか?
はい。UTF-8としてデコードして表示します。
コラム
ほかの開発ツール