-
JSON Web Token (JWT) Profile for OAuth 2.0 Access Tokens draft-ietf-oauth-access-token-jwt-13
(JWT形式のアクセストークンに関する仕様)の個人用メモ - アクセストークンをJWT形式にすることで、アクセストークンに紐付く情報をアクセストークンの中に埋め込む方法。
アクセストークン データ構造
- 偽造検知のため、生成データに署名を含め、利用時に検証する。
ヘッダー部
- 署名検証を行うために必要な情報を格納する
パラメータ | 必須 | 説明 |
---|---|---|
typ |
〇 | トークン形式としてat+jwt を指定する。 |
alg |
署名に使用するアルゴリズムを指定する。none は指定しないこと。 |
|
kid |
鍵識別子。 |
ペイロード/クレーム部
パラメータ | 必須 | 説明 |
---|---|---|
iss |
〇 | JWT発行者 |
exp |
〇 | JWT有効期限 |
aud |
〇 | JWTを受け取るクライアント識別子 認可リクエストにresource パラメータが指定された場合、aud クレームにはresource パラメータと同じ値が指定される |
sub |
〇 | リソースオーナー識別子 |
client_id |
〇 | クライアントID |
iat |
〇 | JWT発行時刻 |
jti |
〇 | JWTを一意に識別するための識別子 |
scope |
認可範囲 |
その他にもあり
認可リクエスト/JWTアクセストークン例
-
認可リクエスト
GET /as/authorization.oauth2?response_type=code &client_id=s6BhdRkqt3 &state=xyz &scope=openid%20profile%20reademail &redirect_uri=https%3A%2F%2Fclient%2Eexample%2Ecom%2Fcb &resource=https%3A%2F%2Frs.example.com%2F HTTP/1.1 Host: authorization-server.example.com
-
JWTアクセストークンのヘッダー部とクレーム部
-
ヘッダー部
{ "typ":"at+JWT", "alg":"RS256", "kid":"RjEwOwOA" }
-
クレーム部
{ "iss": "https://authorization-server.example.com/", "sub": "5ba552d67", "aud": "https://rs.example.com/", "exp": 1639528912, "iat": 1618354090, "jti" : "dbe39bf3a3ba4238a513f51d6e1691c4", "client_id": "s6BhdRkqt3", "scope": "openid profile reademail" }
-
アクセストークン検証
- リソースサーバーは、偽造されていないことを検証してから、アクセストークンに埋め込まれている情報を利用する。
流れ
-
typ
ヘッダーパラメータがat+jwt
もしくはapplication/at+jwt
であることを確認する。 - JWTアクセストークンが暗号化されている場合は、登録時にリソースサーバーが指定したキーとアルゴリズムを使用して復号化する。
-
iss
クレームを参照し、認可サーバー識別子と一致していることを確認する。 -
aud
クレームがリソースサーバー識別子と一致していること確認する。 -
alg
ヘッダーパラメータに指定されているアルゴリズムを使用し、署名を検証する。 -
exp
クレームが現在時刻よりも未来日時であることを確認する。