JWTデコーダー
JSON Web Tokenの中身を確認できます。
クレーム
| クレーム | 値 | 意味 |
|---|
このツールはトークンをデコードするだけで、署名の検証は行いません。トークンはこのブラウザタブ内にとどまります。
ブラウザ内で動作します。入力した内容はどこにも送信されません。
- expとiatを読みやすい日時で表示
- 有効期限がひと目で分かる
- トークンは端末内にとどまる
JWTのデコード方法
- Bearerプレフィックスの有無にかかわらずトークンを貼り付けます。
- 整形されたJSONとしてヘッダーとペイロードを確認します。
- クレーム表で発行者、対象読者、有効期限を確認します。
JWTの3つのパーツ
| パーツ | エンコード | 内容 |
|---|---|---|
| ヘッダー | Base64url JSON | 署名アルゴリズム(alg)とトークンの種類(typ) |
| ペイロード | Base64url JSON | クレーム(トークンの実際のデータ) |
| 署名 | Base64urlバイト列 | ヘッダーとペイロードが改ざんされていないことの証明 |
よく使われる署名アルゴリズム
| algの値 | 種類 | 備考 |
|---|---|---|
| HS256 | 対称、共有シークレット | 自分でトークンを発行・検証する単一のアプリでよく使われる |
| RS256 | 非対称、RSA | OAuthのように他者がトークンを検証する必要がある場合によく使われる |
| ES256 | 非対称、楕円曲線 | 同じ安全性でもRSAより短い署名 |
| none | 署名なし | 検証者は常にこのアルゴリズムを拒否すべき |
RFC 7519による標準クレーム
- exp、nbf、iatはすべてNumericDate値で、Unixエポックからの秒数(ミリ秒ではない)です。
- audは単一の文字列でも、複数の対象読者向けの場合は文字列の配列でも構いません。
- jtiはトークンごとに一意であることを意図しており、これにより特定のトークンだけをブロックリストに載せられます。
- 標準クレームはどれも必須ではありません。トークンはアプリケーションが定義する独自のクレームだけを持つこともできます。
JWTデコーダーのFAQ
JWTの3つのパーツとは何ですか?
ヘッダー、ペイロード、署名の3つで、それぞれbase64urlでエンコードされ、ドットでつながれています。ヘッダーは署名アルゴリズムを示し、ペイロードにはクレームが入り、署名によってサーバーはトークンの発行者を確認できます。
このツールは署名を検証しますか?
いいえ。ヘッダーとペイロードをデコードするだけで、署名のチェックは行いません。信頼する前に、シークレットまたは公開鍵を使ってサーバー側で検証してください。貼り付けたトークンはブラウザの外に出ません。
JWTのペイロードは暗号化されていますか?
通常の署名付きJWTでは暗号化されていません。エンコードされているだけなので、トークンを持っていれば誰でも読めます。そのためパスワードや個人情報を入れるべきではありません。暗号化されたトークン(JWE)は5パーツで構成され、鍵が必要です。
exp、iat、nbfとは何ですか?
いずれも1970年1月1日(UTC)からの秒数で表される時刻です。expはトークンの有効期限、iatは発行時刻、nbfはそれより前には受け付けてはならない時刻です。
トークンが期限切れと表示されるのはなぜですか?
expの時刻が端末の時計より前になっているためです。アクセストークンは5〜60分程度しか有効でないことが多いので、新しいトークンを取得し、パソコンの時計が正しく設定されているか確認してください。
RFC 7519は何を定めていますか?
JWTの形式そのもの、つまりドットでつながれた3つのbase64urlパーツと、iss、sub、exp、audといった標準クレームの意味を定めています。特定の署名アルゴリズムを要求するものではありません。
JWTは期限前に無効化できますか?
トークン自体は単なる署名付きデータなので、それ自体では無効化できません。早期に無効化するには、jtiクレームをキーにしたブロックリストや、短い有効期限と別のリフレッシュトークンの組み合わせなど、サーバー側での対応が必要です。
expやiatが日付ではなく大きな数値で表示されるのはなぜですか?
トークン内ではNumericDate値、つまりUnixエポック(1970年1月1日UTC)からの秒数として保存されているためです。このページでは分かりやすいように、生の数値の横に読みやすい日付も表示しています。