跳到主要内容

2. 响应参数 iss (Response Parameter iss)

在发送给客户端的授权响应中, 包括错误响应, 支持本规范的授权服务器必须 (MUST) 通过在响应中包含 iss 参数来表明自身身份.

iss 参数值是创建该授权响应的授权服务器的颁发者标识符 (issuer identifier), 其定义见 [RFC8414]. 该值必须 (MUST) 是一个使用 "https" scheme 的 URL, 且不包含任何查询 (query) 或片段 (fragment) 组件.

2.1. 授权响应示例 (Example Authorization Response)

以下示例展示了来自授权服务器的授权响应, 该授权服务器的颁发者标识符为 https://honest.as.example (额外换行和缩进仅用于展示):

HTTP/1.1 302 Found
Location: https://client.example/cb?
code=x1848ZT64p4IirMPT0R-X3141MFPTuBX-VFL_cvaplMH58
&state=ZWVlNDBlYzA1NjdkMDNhYjg3ZjUxZjAyNGQzMTM2NzI
&iss=https%3A%2F%2Fhonest.as.example

2.2. 错误响应示例 (Example Error Response)

以下示例展示了来自同一授权服务器的错误响应 (额外换行和缩进仅用于展示):

HTTP/1.1 302 Found
Location: https://client.example/cb?
error=access_denied
&state=N2JjNGJhY2JiZjRhYzA3MGJkMzNmMDE5OWJhZmJhZjA
&iss=https%3A%2F%2Fhonest.as.example

2.3. 提供颁发者标识符 (Providing the Issuer Identifier)

支持本规范的授权服务器必须 (MUST) 提供其颁发者标识符, 使客户端能够有效验证 iss 参数.

对于按照 [RFC8414] 发布元数据的授权服务器, 适用以下规则:

  • 服务器元数据值 issuer 中包含的颁发者标识符必须 (MUST) 与 iss 参数值完全相同.

  • 服务器必须 (MUST) 将 Section 3 中定义的元数据参数 authorization_response_iss_parameter_supported 设置为 true, 以表明其支持 iss 参数.

授权服务器还可以 (MAY) 通过任何其他机制向客户端提供颁发者标识符, 这些机制不在本规范范围内.

2.4. 验证颁发者标识符 (Validating the Issuer Identifier)

支持本规范的客户端在收到授权响应时, 如果其中存在 iss 参数, 则必须 (MUST) 提取其值. 随后, 客户端必须 (MUST) 按照 [RFC6749] Appendix B 将该值从 "application/x-www-form-urlencoded" 形式解码, 并将结果与发送授权请求的授权服务器的颁发者标识符进行比较. 此比较必须 (MUST) 使用 [RFC3986] Section 6.2.1 中定义的简单字符串比较. 如果该值与预期的颁发者标识符不匹配, 客户端必须 (MUST) 拒绝该授权响应, 且禁止 (MUST NOT) 继续授权授予流程. 对于错误响应, 客户端禁止 (MUST NOT) 假定该错误来自预期的授权服务器.

更准确地说, 与支持 OAuth 元数据 [RFC8414] 的授权服务器交互的客户端必须 (MUST) 将 iss 参数值与服务器元数据文档中的 issuer 值进行比较. 如果不使用 OAuth 元数据, 客户端必须 (MUST) 使用特定于部署的方式 (例如静态配置), 判断返回的 iss 值是否为当前流程中的预期值 (另见 Section 4).

如果客户端同时与支持本规范和不支持本规范的授权服务器交互, 客户端必须 (MUST) 保留状态, 记录每个授权服务器是否支持 iss 参数. 对于按照客户端配置支持该参数的授权服务器, 如果其授权响应不包含 iss 参数, 客户端必须 (MUST) 拒绝该响应. 对于未表明支持该参数的授权服务器, 如果其授权响应包含 iss 参数, 客户端应当 (SHOULD) 丢弃该响应. 但是, 可能存在合法的授权服务器, 它们提供 iss 参数但未在元数据中表明支持. 本地策略或配置可以决定是否接受这类响应, 具体指导不在本规范范围内.

一般而言, 支持本规范的客户端可以 (MAY) 接受不包含 iss 参数的授权响应, 也可以拒绝这类响应并仅支持在授权响应中提供 iss 参数的授权服务器. 本地策略或配置可以决定何时接受这类响应, 具体指导不在本规范范围内.

在 OpenID Connect [OIDC.Core] 流程中, 如果授权端点返回 ID Token, 则 iss 参数中的值必须 (MUST) 始终与 ID Token 中的 iss claim 完全相同.

[RFC6749] Section 4.1.2 已要求不支持本规范的客户端必须 (MUST) 忽略无法识别的 iss 参数.

注意: "JWT Secured Authorization Response Mode for OAuth 2.0 (JARM)" [JARM] 定义了一种机制, 使用 JSON Web Token (JWT) 传送所有授权响应参数. 该 JWT 包含一个 iss claim; 如果按 Section 2.4 所述方式验证, 它可以提供相同保护. 因此, 使用 JARM 时不需要在 JWT 之外额外提供 iss 参数.