跳到主要内容

2.1. Authorization Request (授权请求)

2.1. Authorization Request (授权请求)

当在发往授权端点 (authorization endpoint) 的授权请求中使用 resource 参数时, 它表示正在请求访问的受保护资源的身份. 当访问令牌将通过隐式流 (implicit flow, OAuth 2.0 [RFC6749] 第 4.2 节) 直接从授权端点返回时, 所请求的资源适用于该访问令牌. 在授权码流 (code flow, [RFC6749] 第 4.1 节) 中, 授权端点返回的是授权许可 (authorization grant) 的中间表示 (授权码), 所请求的资源适用于完整授权许可.

对于以 JSON Web Token (JWT) 形式发送的授权请求, 例如使用 JWT Secured Authorization Request (JWT 安全授权请求) [JWT-SAR] 时, 单个 resource 参数值表示为 JSON 字符串, 多个值表示为字符串数组.

若客户端在请求授权时省略 resource 参数, 授权服务器可以无特定资源处理该请求, 或使用预定义的默认资源值. 或者, 授权服务器可以要求客户端指明其打算访问的资源, 并可以对省略该参数的请求以 invalid_target 错误失败. 授权服务器可利用这些数据向用户说明客户端将代表其访问哪些资源, 施加策略 (例如因未知资源而拒绝请求), 并确定后续访问令牌请求中可使用的资源集合.

若授权服务器无法解析所提供的值, 或认为资源不可接受, 应使用错误响应拒绝请求, 将 error 参数的值设为错误码 invalid_target, 并可通过 error_description 提供有关错误原因的更多信息.

图 1 展示授权请求示例: 客户端告知授权服务器其希望获得用于 https://api.example.com/app/ 的访问令牌 (为显示起见, 额外的换行与缩进仅作排版).

GET /as/authorization.oauth2?response_type=token
&client_id=example-client
&state=XzZaJlcwYew1u0QBrRv_Gw
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
&resource=https%3A%2F%2Fapi.example.com%2Fapp%2F HTTP/1.1
Host: authorization-server.example.com

图 1: 隐式流授权请求

图 2 为使用 code 响应类型的授权请求示例: 客户端请求访问资源所有者在 https://cal.example.com/https://contacts.example.com/ 的联系人及日历数据 (为显示起见, 额外的换行与缩进仅作排版).

GET /as/authorization.oauth2?response_type=code
&client_id=s6BhdRkqt3
&state=tNwzQ87pC6llebpmac_IDeeq-mCR2wLDYljHUZUAWuI
&redirect_uri=https%3A%2F%2Fclient.example.org%2Fcb
&scope=calendar%20contacts
&resource=https%3A%2F%2Fcal.example.com%2F
&resource=https%3A%2F%2Fcontacts.example.com%2F HTTP/1.1
Host: authorization-server.example.com

图 2: 授权码流授权请求