3. Requesting a JWT Access Token (请求JWT访问令牌)
授权服务器可以响应[RFC6749]及后续扩展定义的任何旨在产生访问令牌的授权许可而签发JWT访问令牌.
如果请求包含 "resource" 参数 (如[RFC8707]中定义), 则生成的JWT访问令牌的 "aud" 声明应该 (SHOULD) 具有与请求中 "resource" 参数相同的值.
以下示例请求:
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
图1: 带有资源和作用域参数的授权请求
一旦兑换, 从上述请求获得的代码将产生如下所示形式的JWT访问令牌:
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"
}
图2: JWT访问令牌的头部和JWT声明集
如果令牌授予的授权是模糊的, 授权服务器禁止 (MUST NOT) 签发JWT访问令牌. 有关可能导致模糊性的常见情况以及授权服务器可以采取的预防策略的更多详细信息, 请参见第5节.
如果请求不包含 "resource" 参数, 授权服务器必须 (MUST) 在 "aud" 声明中使用默认资源指示符 (Default Resource Indicator). 如果请求中存在 "scope" 参数, 授权服务器应该 (SHOULD) 使用它来推断要在 "aud" 声明中使用的默认资源指示符的值. 作用域与默认资源指示符值关联的机制超出了本规范的范围. 如果 "scope" 参数中的值引用不同的默认资源指示符值, 授权服务器应该 (SHOULD) 按照[RFC6749]第4.1.2.1节的描述使用 "invalid_scope" 拒绝请求.