JWTデコーダー
JWTのヘッダー、ペイロードのクレーム、署名を解読し、exp・nbf・iatを日時で表示して有効期限の状態も示します。ローカルで動作し、アップロードはされません。
先頭の "Bearer " は自動的に取り除かれます。
{
"alg": "HS256",
"typ": "JWT"
}{
"sub": "1234567890",
"name": "John Doe",
"iat": 1516239022
}| アルゴリズム | HS256 |
|---|---|
| 署名 | SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c |
JWTデコーダーとは?
JWTデコーダーは、JSON Web Tokenをヘッダー、ペイロード、署名に分割し、JSONを整形して表示します。時刻クレーム(exp、nbf、iat)は相対時間つきの読みやすいUTC日時に変換され、ステータスバッジでトークンが期限切れか、まだ有効でないか、有効期限がないかが分かります。行うのはデコードだけで、署名の検証は行いません。
JWTデコーダーの使い方
- トークンを貼り付けます(先頭の
Bearerは自動的に取り除かれます)。 - デコードされたヘッダー(アルゴリズム、タイプ、キーID)とペイロードのクレームを確認します。
- 有効期限のステータスと、exp/nbf/iatの日時を確認します。
- クレームを信頼する前に、正しい鍵でJWTベリファイアを使います。
例
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
Header {"alg": "HS256", "typ": "JWT"} · payload {"sub": "1234567890", "name": "John Doe", "iat": 1516239022} · status: no expiration JWTデコーダーを使うべき場面
認証のデバッグ、つまりトークンがどのクレーム、スコープ、audience、有効期限を持つかの確認に使います。デコードしたクレームを信頼できるものとして扱わないでください。誰でも任意の内容のトークンを作れます。暗号化されたトークン(JWE、5つの部分)は、鍵がなければデコードできません。
JWTデコーダーの仕組み
コンパクトなJWSは、ドットで区切られた3つのBase64URL部分で構成されます。最初の2つはデコード(Base64URL → バイト列 → UTF-8)されてJSONとして解析され、3つ目はバイナリの署名データなのでそのまま表示されます。時刻クレームはNumericDate値(1970-01-01 UTCからの秒数)で、お使いのデバイスの時計と比較されます。データがブラウザの外に出ることはありません。
一般的な使用例
- APIが401を返す理由(トークンが期限切れか、audienceが違うか)を調べる。
- アクセストークンに含まれるロールやスコープを読む。
- ヘッダーのkidを確認して、どの署名鍵が使われたかを調べる。
- OpenID ConnectプロバイダーのIDトークンを調べる。
セキュリティ注意事項
デコードはブラウザ内だけで行われます。JWTはパスワードと同様に扱ってください。有効なトークンを持つ人は誰でも、期限が切れるまでそれを使えます。
よくある質問
本番のトークンを貼り付けても安全ですか。
トークンはローカルでデコードされ、どこにも送信されません。ただし、有効なトークンは資格情報です。管理外の場所に共有してしまった場合は、失効させてください。
デコードが検証ではないのはなぜですか。
ペイロードはBase64URLでエンコードされているだけで、暗号化されていません。検証には、シークレットまたは公開鍵で署名を確認する必要があります。
exp、nbf、iatは何を意味しますか。
expは有効期限、nbfは「not before」(それ以前は無効)、iatは発行時刻で、いずれもUnixエポックからの秒数です。