デコード | 検査 | 検証

> デコード | 検査 | 検証 <

// JSON Web Token(JWT)を即座にデコード・検査

[安全]

ローカル処理

100%クライアントサイドJWTデコード。トークンはブラウザから離れません。

[即座]

自動デコード

貼り付けまたは入力時にJWTトークンを自動的にデコード。

[無料]

完全なトークン検査

ヘッダー、ペイロード、署名を表示。アルゴリズムと有効期限を確認。

// JWTデコードについて

JWT構造:

JSON Web Token(JWT)は、ドットで区切られた3つのBase64URLエンコード部分で構成されます:ヘッダー.ペイロード.署名。ヘッダーはアルゴリズムとトークンタイプを指定します。ペイロードにはクレーム(データ)が含まれます。署名はトークンの整合性を検証します。

例:

eyJhbGciOiJIUzI1NiJ9.eyJzdWIiOiIxMjM0In0.signature → {"alg":"HS256"} + {"sub":"1234"}

一般的な使用例:

  • >Webアプリケーションの認証トークンのデバッグ
  • >OAuth 2.0およびOpenID Connectトークンの検査
  • >トークンの有効期限とクレームの検証
  • >RFC 7519に基づくJWT構造の理解
  • >Base64URLエンコードの整合性確認

>> よくある質問

Q: JSON Web Token(JWT)とは?

A: JWT(JSON Web Token)は、JSONオブジェクトとして当事者間で安全に情報を伝送するためのオープンスタンダード(RFC 7519)です。コンパクトでURL安全であり、認証に広く使用されています。

Q: JWTの3つの部分とは?

A: JWTはドットで区切られた3つの部分で構成されます:ヘッダー(アルゴリズムとタイプ)、ペイロード(クレームとデータ)、署名(検証ハッシュ)。各部分はBase64URLでエンコードされます。

Q: 秘密鍵なしでJWTをデコードできますか?

A: はい、JWTのヘッダーとペイロードは単にBase64URLエンコードされている(暗号化されていない)ため、誰でもデコードできます。秘密鍵は署名の検証にのみ必要です。

Q: JWTとセッションベース認証の違いは?

A: セッションはサーバー上にセッションIDクッキーで状態を保存します。JWTはステートレスで、トークン自体にすべての必要な情報が含まれています。

Q: JWTの有効期限はどのように機能しますか?

A: JWTペイロードのexpクレームは、Unixタイムスタンプとして有効期限を指定します。この時間を過ぎると、トークンは無効と見なされます。

// 一般的なJWT署名アルゴリズム

ヘッダーの alg が署名方法を決めます。HS* は共有シークレット、RS*・PS*・ES*・EdDSA は鍵ペアを使います。

algアルゴリズム
HS256HMAC + SHA-256
HS512HMAC + SHA-512
RS256RSA PKCS#1 v1.5 + SHA-256
PS256RSASSA-PSS + SHA-256
ES256ECDSA P-256 + SHA-256
EdDSAEd25519

// コードでJWTを検証

デコードだけでは何も検証されません。検証時は許可するアルゴリズムを必ず明示してください。

Node.js (jsonwebtoken)   jwt.verify(token, secret, { algorithms: ['HS256'] })
Python (PyJWT)           jwt.decode(token, key, algorithms=["HS256"])
PHP (firebase/php-jwt)   JWT::decode($token, new Key($key, 'HS256'))
Go (golang-jwt)          jwt.Parse(token, keyFunc, jwt.WithValidMethods([]string{"HS256"}))
Java (jjwt)              Jwts.parser().verifyWith(key).build().parseSignedClaims(token)

>> その他の質問

Q: 標準クレーム iss、sub、aud、exp、nbf、iat、jti の意味は?

A: iss は発行者、sub は主体(通常はユーザーID)、aud は想定受信者、exp は有効期限、nbf は有効開始時刻、iat は発行時刻、jti はトークンの一意なIDです。時刻はUnix秒です。

Q: JWTは暗号化されていますか?

A: 通常の署名付きJWT(JWS)は暗号化されておらず、Base64URLでエンコードされているだけなので、誰でも内容を読めます。署名は改ざんを防ぐだけです。機密情報は入れないか、暗号化されたJWEを使ってください。

Q: JWTの署名を検証するには?

A: 鍵が必要です。HS256なら共有シークレット、RS256/ES256なら公開鍵です。サーバーは ヘッダー.ペイロード の署名を再計算して比較します。このデコーダーはブラウザ内で動作し署名検証は行わないため、実績のあるライブラリを使ってください。

Q: JWTでよくあるセキュリティ上の誤りは?

A: トークン自身の alg(特に none)を信用する、HS256のシークレットが弱い、exp・iss・aud を検証しない、ペイロードに機密情報を入れる、長寿命トークンをlocalStorageに保存する、などがよくあります。

// 他の言語