> デコード | 検査 | 検証 <
// 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 | アルゴリズム |
|---|---|
| HS256 | HMAC + SHA-256 |
| HS512 | HMAC + SHA-512 |
| RS256 | RSA PKCS#1 v1.5 + SHA-256 |
| PS256 | RSASSA-PSS + SHA-256 |
| ES256 | ECDSA P-256 + SHA-256 |
| EdDSA | Ed25519 |
// コードで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に保存する、などがよくあります。