JWTデコーダー

JWTのヘッダー、ペイロードのクレーム、署名を解読し、exp・nbf・iatを日時で表示して有効期限の状態も示します。ローカルで動作し、アップロードはされません。

先頭の "Bearer " は自動的に取り除かれます。

ヘッダー
{
  "alg": "HS256",
  "typ": "JWT"
}
ペイロード
{
  "sub": "1234567890",
  "name": "John Doe",
  "iat": 1516239022
}
アルゴリズムHS256
署名SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c
デコードでは署名は検証されません。誰でも任意の内容のトークンを作れます。信頼する前に、正しい鍵を使って JWT 検証ツールで確認してください。

JWTデコーダーとは?

JWTデコーダーは、JSON Web Tokenをヘッダー、ペイロード、署名に分割し、JSONを整形して表示します。時刻クレーム(exp、nbf、iat)は相対時間つきの読みやすいUTC日時に変換され、ステータスバッジでトークンが期限切れか、まだ有効でないか、有効期限がないかが分かります。行うのはデコードだけで、署名の検証は行いません。

JWTデコーダーの使い方

  1. トークンを貼り付けます(先頭の Bearer は自動的に取り除かれます)。
  2. デコードされたヘッダー(アルゴリズム、タイプ、キーID)とペイロードのクレームを確認します。
  3. 有効期限のステータスと、exp/nbf/iatの日時を確認します。
  4. クレームを信頼する前に、正しい鍵で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エポックからの秒数です。

他のカテゴリを見る