跳到主要内容

3. 请求 JWT Access Token

authorization server 可以响应 [RFC6749] 及后续 extensions 中定义的, 旨在产生 access token 的任何 authorization grant, 签发 JWT access token.

如果 request 包含 "resource" parameter (如 [RFC8707] 中定义), 所得 JWT access token 的 "aud" claim SHOULD 与 request 中的 "resource" parameter 具有相同值.

示例 request 如下:

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

Figure 1: 带有 Resource 和 Scope Parameters 的 Authorization Request

一旦兑换, 从上述 request 获得的 code 将产生如下形式的 JWT access token:

Header:

{"typ":"at+JWT","alg":"RS256","kid":"RjEwOwOA"}

Claims:

{
"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"
}

Figure 2: JWT Access Token 的 Header 和 JWT Claims Set

如果 token 授予的 authorization 会产生歧义, authorization server MUST NOT 签发 JWT access token. 关于可能导致歧义的常见情况以及 authorization server 可采取的预防策略, 更多细节见 Section 5.

如果 request 不包含 "resource" parameter, authorization server MUST 在 "aud" claim 中使用 default resource indicator. 如果 request 中存在 "scope" parameter, authorization server SHOULD 使用它来推断要在 "aud" claim 中使用的 default resource indicator 值. scopes 与 default resource indicator values 关联的机制超出本规范范围. 如果 "scope" parameter 中的 values 指向不同的 default resource indicator values, authorization server SHOULD 按 [RFC6749] Section 4.1.2.1 中的描述以 "invalid_scope" 拒绝该 request.