Skip to main content

3. 授权请求 (Authorization Request)

authorization_details授权请求参数可用于在所有使用scope参数达到相同目的的地方指定授权要求,示例包括:

  • [RFC6749]中指定的授权请求
  • [RFC8628]中指定的设备授权请求
  • [OID-CIBA]中定义的后台通道认证请求

对于[RFC6749]中定义的授权请求,实现者可以(MAY)考虑使用推送授权请求[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

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

注意: 用户也可以授予所请求授权详情的子集。

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

authorization_detailsscope可以在同一授权请求中使用,以携带独立的授权要求。本规范支持authorization_detailsscope的组合使用,部分是为了允许现有的基于OAuth的应用程序逐步迁移到专门使用authorization_details。建议(RECOMMENDED)给定的API仅使用一种形式的要求规范。

对于给定的授权请求,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授权请求参数的方式产生任何影响。