JSON Web Token (JWT)
JWT(JSON Web Token)は、JSONオブジェクトとして当事者間で情報を安全に送信するためのコンパクトで自己完結型の方法を定義するオープン標準(RFC 7519)です。この情報はデジタル署名されているため、検証および信頼できます。JWTは、秘密(HMACアルゴリズム使用)またはRSAやECDSAを使用した公開鍵/秘密鍵ペアを使用して署名できます。
JWT構造
JWTはドット(.)で区切られた3つの部分で構成されています:
.yyyyy.zzzzz
-
:
トークンタイプ(JWT)と署名アルゴリズム(例:HS256、RS256)を含みます
-
ペイロード :
クレーム - エンティティ(通常はユーザー)に関するステートメントと追加データを含みます
-
署名 :
JWTの送信者が本人であることを確認し、メッセージが途中で変更されていないことを保証するために使用されます
署名アルゴリズム
JWTはさまざまな署名アルゴリズムをサポートしています:
- HS256: HMAC with SHA-256。共有秘密を使用する対称アルゴリズム
- HS384: HMAC with SHA-384。より強力なハッシュを持つ対称アルゴリズム
- HS512: HMAC with SHA-512。最強のハッシュを持つ対称アルゴリズム
- RS256: RSA Signature with SHA-256。公開鍵/秘密鍵ペアを使用する非対称アルゴリズム
- RS384: RSA Signature with SHA-384。より強力なハッシュを持つ非対称アルゴリズム
- RS512: RSA Signature with SHA-512。最強のハッシュを持つ非対称アルゴリズム
標準クレーム
JWTは、有用な情報を提供するいくつかの標準クレーム(登録されたクレーム名)を定義しています:
- iss (Issuer): トークン発行者
- sub (Subject): トークンの主題(ユーザーID)
- aud (Audience): 対象者
- exp (Expiration Time): 有効期限(Unixタイムスタンプ)
- nbf (Not Before): 有効開始時刻
- iat (Issued At): 発行時刻
- jti (JWT ID): トークンの一意識別子
一般的な使用例
- 認証:ユーザーログイン後、各後続リクエストにJWTが含まれ、ルート、サービス、リソースへのアクセスを許可します
- 情報交換:署名検証により当事者間で情報を安全に送信します
- シングルサインオン(SSO):オーバーヘッドが小さく、クロスドメイン機能があるため、SSO機能に広く使用されています
- API認可:RESTful APIのステートレス認証
- OAuth 2.0とOpenID Connect:現代の認証プロトコルの中心コンポーネント
セキュリティ注意:
JWTトークンは真正性を検証するために署名されていますが、デフォルトでは暗号化されていません。別途暗号化しない限り、ペイロードに機密情報を保存しないでください。トークンの送信には常にHTTPSを使用してください。トークンを安全に保存してください(例:Webアプリケーションの場合はhttpOnly cookie)。適切なトークン有効期限と更新メカニズムを実装してください。クライアント側のコードで秘密鍵を公開しないでください。