跳到主要内容

3. 授权请求 (Authorization Request)

凡是 scope 参数可用于指定授权需求的地方, 都可以使用 authorization_details 授权请求参数来指定授权需求, 示例包括:

  • [RFC6749] 中规定的授权请求
  • [RFC8628] 中规定的设备授权请求
  • [OID-CIBA] 中定义的反向通道认证请求

对于 [RFC6749] 中定义的授权请求, 实现者 MAY 考虑使用推送授权请求 (pushed authorization requests) [RFC9126], 以提升流程的安全性、隐私性和可靠性. 详见第 12 节、第 13 节和第 11.4 节.

参数编码由相应上下文决定. 在符合 [RFC6749] 的授权请求上下文中, 该参数使用序列化 JSON 的 application/x-www-form-urlencoded 格式进行编码, 如图 8 所示, 该图使用第 2 节中的示例 (换行仅为便于显示):

GET /authorize?response_type=code
&client_id=s6BhdRkqt3
&state=af0ifjsldkj
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
&code_challenge_method=S256
&code_challenge=K2-ltc83acc4h0c9w6ESC_rEMTJ3bwc-uCHaoeK1t8U
&authorization_details=%5B%7B%22type%22%3A%22account%5Finformation%22%2C%22actions%22%3A%5B%22list%5Faccounts%22%2C%22read%5Fbalances%22%2C%22read%5Ftransactions%22%5D%2C%22locations%22%3A%5B%22https%3A%2F%2Fexample%2Ecom%2Faccounts%22%5D%7D%2C%7B%22type%22%3A%22payment%5Finitiation%22%2C%22actions%22%3A%5B%22initiate%22%2C%22status%22%2C%22cancel%22%5D%2C%22locations%22%3A%5B%22https%3A%2F%2Fexample%2Ecom%2Fpayments%22%5D%2C%22instructedAmount%22%3A%7B%22currency%22%3A%22EUR%22%2C%22amount%22%3A%22123%2E50%22%7D%2C%22creditorName%22%3A%22Merchant%20A%22%2C%22creditorAccount%22%3A%7B%22iban%22%3A%22DE02100100109307118603%22%7D%2C%22remittanceInformationUnstructured%22%3A%22Ref%20Number%20Merchant%22%7D%5D HTTP/1.1
Host: server.example.com

AS 将基于 authorization_details 参数中提供的数据, 请求用户同意所请求的访问权限.

: 用户也可以授予所请求授权详情的一个子集.

3.1. 与 "scope" 参数的关系 (Relationship to the "scope" Parameter)

authorization_detailsscope 可以在同一授权请求中使用, 以承载彼此独立的授权需求. 本规范支持组合使用 authorization_detailsscope, 部分原因是允许现有基于 OAuth 的应用逐步迁移到仅使用 authorization_details. 对于给定 API, RECOMMENDED 只使用一种需求说明形式.

对于给定授权请求, AS MUST 将这两组需求结合起来处理. AS 如何组合这些参数的细节取决于受保护的具体 API, 不在本规范范围内.

在收集用户同意时, AS MUST 展示该授权请求所表示的合并需求集合.

如果资源所有者向客户端授予所请求的访问权限, AS 将向客户端签发与相应 authorization_details (以及适用时的 scope 值) 相关联的令牌.

3.2. 与 "resource" 参数的关系 (Relationship to the "resource" Parameter)

[RFC8707] 中定义的 resource 授权请求参数可用于进一步确定所请求 scope 可适用的资源. resource 参数不会影响 AS 处理 authorization_details 授权请求参数的方式.