跳到主要内容

2. 授权服务器元数据 (Authorization Server Metadata)

授权服务器可以具有描述其配置的元数据 (metadata). 本规范使用以下授权服务器元数据值, 这些值注册在第 7.1 节建立的 IANA "OAuth Authorization Server Metadata" 注册表中:

issuer

  • REQUIRED. 授权服务器的发行者标识符 (issuer identifier), 它是一个使用 "https" 方案且不包含查询组件或片段组件的 URL. 如第 3 节所述, 授权服务器元数据发布在依据 RFC 5785 [RFC5785] 从此发行者标识符派生出的 ".well-known" 位置. 发行者标识符用于防止授权服务器混淆攻击, 见 "OAuth 2.0 Mix-Up Mitigation" [MIX-UP].

authorization_endpoint

  • 授权服务器的授权端点 (authorization endpoint) [RFC6749] 的 URL. 除非不支持任何使用授权端点的授权类型, 否则此项为 REQUIRED.

token_endpoint

  • 授权服务器的令牌端点 (token endpoint) [RFC6749] 的 URL. 除非仅支持隐式授权类型, 否则此项为 REQUIRED.

jwks_uri

  • OPTIONAL. 授权服务器的 JWK Set [JWK] 文档的 URL. 被引用的文档包含客户端用于验证来自授权服务器签名的签名密钥. 此 URL MUST 使用 "https" 方案. JWK Set 也 MAY 包含服务器的加密密钥, 客户端使用这些密钥来加密发往服务器的请求. 当同时提供签名密钥和加密密钥时, 被引用 JWK Set 中所有密钥都 REQUIRED 具有 "use" (public key use) 参数值, 用于指示每个密钥的预期用途.

registration_endpoint

  • OPTIONAL. 授权服务器的 OAuth 2.0 动态客户端注册端点 (Dynamic Client Registration endpoint) [RFC7591] 的 URL.

scopes_supported

  • RECOMMENDED. JSON 数组, 包含此授权服务器支持的 OAuth 2.0 [RFC6749] "scope" 值列表. 即使使用此参数, 服务器也 MAY 选择不公布某些受支持的作用域值.

response_types_supported

  • REQUIRED. JSON 数组, 包含此授权服务器支持的 OAuth 2.0 "response_type" 值列表. 所使用的数组值与 "OAuth 2.0 Dynamic Client Registration Protocol" [RFC7591] 定义的 "response_types" 参数所用值相同.

response_modes_supported

  • OPTIONAL. JSON 数组, 包含此授权服务器支持的 OAuth 2.0 "response_mode" 值列表, 如 "OAuth 2.0 Multiple Response Type Encoding Practices" [OAuth.Responses] 所规定. 如果省略, 默认值为 ["query", "fragment"]. 响应模式值 "form_post" 也在 "OAuth 2.0 Form Post Response Mode" [OAuth.Post] 中定义.

grant_types_supported

  • OPTIONAL. JSON 数组, 包含此授权服务器支持的 OAuth 2.0 授权类型 (grant type) 值列表. 所使用的数组值与 "OAuth 2.0 Dynamic Client Registration Protocol" [RFC7591] 定义的 "grant_types" 参数所用值相同. 如果省略, 默认值为 ["authorization_code", "implicit"].

token_endpoint_auth_methods_supported

  • OPTIONAL. JSON 数组, 包含此令牌端点支持的客户端认证方法列表. 客户端认证方法值用于 [RFC7591] 第 2 节定义的 "token_endpoint_auth_method" 参数. 如果省略, 默认值为 "client_secret_basic" -- OAuth 2.0 [RFC6749] 第 2.3.1 节规定的 HTTP Basic Authentication Scheme.

token_endpoint_auth_signing_alg_values_supported

  • OPTIONAL. JSON 数组, 包含令牌端点针对 JWT [JWT] 签名所支持的 JWS 签名算法 ("alg" 值) 列表. 该 JWT 用于在令牌端点通过 "private_key_jwt" 和 "client_secret_jwt" 认证方法认证客户端. 如果在 "token_endpoint_auth_methods_supported" 条目中指定了这两种认证方法之一, 则此元数据条目 MUST 存在. 如果省略此条目, 不隐含任何默认算法. 服务器 SHOULD 支持 "RS256". 值 "none" MUST NOT 使用.

service_documentation

  • OPTIONAL. 某个页面的 URL, 该页面包含开发者在使用授权服务器时可能希望了解或需要了解的可读信息. 特别是, 如果授权服务器不支持动态客户端注册, 则需要在此文档中提供如何注册客户端的信息.

ui_locales_supported

  • OPTIONAL. 用户界面支持的语言和书写文字, 表示为由 BCP 47 [RFC5646] 语言标签值组成的 JSON 数组. 如果省略, 则支持的语言和书写文字集合未指定.

op_policy_uri

  • OPTIONAL. 授权服务器提供给客户端注册人员的 URL, 供其阅读授权服务器关于客户端如何使用授权服务器所提供数据的要求. 如果给出了此 URL, 注册过程 SHOULD 向客户端注册人员显示它. 如第 5 节所述, 虽然标识符 "op_policy_uri" 看起来是 OpenID 专用的, 但它在本规范中的用法实际指的是通用 OAuth 2.0 功能, 并非 OpenID Connect 专用.

op_tos_uri

  • OPTIONAL. 授权服务器提供给客户端注册人员的 URL, 供其阅读授权服务器的服务条款. 如果给出了此 URL, 注册过程 SHOULD 向客户端注册人员显示它. 如第 5 节所述, 虽然标识符 "op_tos_uri" 看起来是 OpenID 专用的, 但它在本规范中的用法实际指的是通用 OAuth 2.0 功能, 并非 OpenID Connect 专用.

revocation_endpoint

  • OPTIONAL. 授权服务器的 OAuth 2.0 撤销端点 (revocation endpoint) [RFC7009] 的 URL.

revocation_endpoint_auth_methods_supported

  • OPTIONAL. JSON 数组, 包含此撤销端点支持的客户端认证方法列表. 有效的客户端认证方法值是在 IANA "OAuth Token Endpoint Authentication Methods" 注册表 [IANA.OAuth.Parameters] 中注册的值. 如果省略, 默认值为 "client_secret_basic" -- OAuth 2.0 [RFC6749] 第 2.3.1 节规定的 HTTP Basic Authentication Scheme.

revocation_endpoint_auth_signing_alg_values_supported

  • OPTIONAL. JSON 数组, 包含撤销端点针对 JWT [JWT] 签名所支持的 JWS 签名算法 ("alg" 值) 列表. 该 JWT 用于在撤销端点通过 "private_key_jwt" 和 "client_secret_jwt" 认证方法认证客户端. 如果在 "revocation_endpoint_auth_methods_supported" 条目中指定了这两种认证方法之一, 则此元数据条目 MUST 存在. 如果省略此条目, 不隐含任何默认算法. 值 "none" MUST NOT 使用.

introspection_endpoint

  • OPTIONAL. 授权服务器的 OAuth 2.0 自省端点 (introspection endpoint) [RFC7662] 的 URL.

introspection_endpoint_auth_methods_supported

  • OPTIONAL. JSON 数组, 包含此自省端点支持的客户端认证方法列表. 有效的客户端认证方法值是在 IANA "OAuth Token Endpoint Authentication Methods" 注册表 [IANA.OAuth.Parameters] 中注册的值, 或者是在 IANA "OAuth Access Token Types" 注册表 [IANA.OAuth.Parameters] 中注册的值. (由于第 7.2 节, 这些值现在不同, 将来也会保持不同.) 如果省略, 则支持的认证方法集合 MUST 通过其他方式确定.

introspection_endpoint_auth_signing_alg_values_supported

  • OPTIONAL. JSON 数组, 包含自省端点针对 JWT [JWT] 签名所支持的 JWS 签名算法 ("alg" 值) 列表. 该 JWT 用于在自省端点通过 "private_key_jwt" 和 "client_secret_jwt" 认证方法认证客户端. 如果在 "introspection_endpoint_auth_methods_supported" 条目中指定了这两种认证方法之一, 则此元数据条目 MUST 存在. 如果省略此条目, 不隐含任何默认算法. 值 "none" MUST NOT 使用.

code_challenge_methods_supported

  • OPTIONAL. JSON 数组, 包含此授权服务器支持的 Proof Key for Code Exchange (PKCE) [RFC7636] 代码挑战方法列表. 代码挑战方法值用于 [RFC7636] 第 4.3 节定义的 "code_challenge_method" 参数. 有效的代码挑战方法值是在 IANA "PKCE Code Challenge Methods" 注册表 [IANA.OAuth.Parameters] 中注册的值. 如果省略, 则授权服务器不支持 PKCE.

也 MAY 使用额外的授权服务器元数据参数. 其中一些参数由其他规范定义, 例如 OpenID Connect Discovery 1.0 [OpenID.Discovery].

2.1. 签名授权服务器元数据 (Signed Authorization Server Metadata)

除 JSON 元素外, 元数据值也 MAY 作为 "signed_metadata" 值提供. 该值是一个 JSON Web Token (JWT) [JWT], 用于将关于授权服务器的元数据值作为一个整体进行断言. 可在签名元数据中使用的一组声明 (claims) 在第 2 节中定义. 签名元数据 MUST 使用 JSON Web Signature (JWS) [JWS] 进行数字签名或 MAC 处理, 并且 MUST 包含一个 "iss" (issuer) 声明, 用于表示对签名元数据中声明进行证明的一方. 不支持此功能的元数据使用者 MAY 忽略签名元数据. 如果元数据使用者支持签名元数据, 则签名元数据中传达的元数据值 MUST 优先于使用普通 JSON 元素传达的对应值.

签名元数据通过以下 OPTIONAL 成员包含在授权服务器元数据 JSON 对象中:

signed_metadata

  • 一个 JWT, 其中以声明形式包含关于授权服务器的元数据值. 这是由整个已签名 JWT 组成的字符串值. "signed_metadata" 元数据值 SHOULD NOT 作为 JWT 中的声明出现.