ISO/IEC 26133:2024 OpenID Connect Dynamic Client Registration 1.0 — 自动化客户端注册

OpenID Connect依赖方如何动态地向OpenID提供者注册以获取客户端凭证

一、动态客户端注册概述

ISO/IEC 26133:2024定义了OpenID Connect Dynamic Client Registration 1.0协议,该规范规定了OpenID Connect依赖方(RP)如何动态地向OpenID提供者(OP)注册。RP向OP提供自身信息,并获取与其交互所需的凭证,包括OAuth 2.0客户端ID。

在RP可以使用OpenID Connect服务之前,它必须与OP建立关系。动态注册自动化了这一过程,无需为每个客户端应用程序进行手动的带外注册。这在许多客户端需要与许多提供者交互的生态系统中尤为有价值。

动态注册是实现”使用Google/Facebook/Apple登录”体验的技术基础。这些提供者都实现了OpenID Connect动态客户端注册,以接受新的客户端应用程序而无需人工干预。

二、客户端元数据模式

在注册过程中,RP向OP提交其元数据。下表描述了关键的元数据字段:

元数据字段 是否必需 说明
redirect_uris 客户端重定向URI值数组
response_types 可选 OAuth 2.0响应类型值数组(默认:code
grant_types 可选 OAuth 2.0授权类型值数组
application_type 可选 webnative,指示客户端类型
client_name 可选 客户端可读名称
logo_uri 可选 客户端标志的URL
token_endpoint_auth_method 可选 令牌端点的认证方法
contacts 可选 客户端管理员的联系邮箱数组
sector_identifier_uri 可选 成对标识符验证的URL
redirect_uris字段是唯一必需的元数据字段——这有充分的理由。不正确的重定向URI验证是OAuth 2.0安全漏洞的最常见来源。每个注册的重定向URI必须是授权响应的精确匹配目标。

三、注册与配置端点

该标准定义了用于客户端注册管理的主要端点:

客户端注册端点:这是一个OAuth 2.0受保护资源,客户端可通过它向授权服务器注册。RP发送包含其元数据的JSON文档,OP响应包含已注册客户端标识符和其他元数据的客户端信息响应。

客户端配置端点:注册后,客户端可通过此端点管理其注册信息。端点URL由OP在初始注册响应中返回。客户端在访问其配置时使用注册访问令牌进行身份验证。

操作 HTTP方法 端点 说明
注册 POST 注册端点 创建新的客户端注册
读取 GET 配置端点 检索当前注册信息
更新 PUT 配置端点 修改客户端配置
删除 DELETE 配置端点 移除客户端注册

四、安全考量与最佳实践

动态客户端注册引入了独特的安全考量。重要的工程实践包括:

  • 初始访问令牌:OP可以颁发授予注册端点访问权限的初始访问令牌。这防止了匿名注册并提供了信任机制。
  • 行业标识符验证:对于成对主题标识符,sector_identifier_uri允许RP托管包含其重定向URI集合的文件。OP获取此文件以验证所有注册的重定向URI是否属于同一实体。
  • 无状态注册:在无状态(或”软件声明”)模式下,OP可以从签名的JWT中派生注册信息,而无需维护每客户端状态,这对于高度可扩展的部署非常有用。
原生应用程序客户端面临独特风险:如果原生客户端嵌入了客户端密钥,该密钥可以通过逆向工程提取。依赖动态注册的原生应用应使用PKCE并避免硬编码密钥。注册访问令牌应被视为敏感数据。

常见问题

问:无状态和有状态动态注册有什么区别?

答:在有状态注册中,OP存储客户端元数据并返回引用该存储状态的客户端ID。在无状态注册(使用软件声明)中,所有客户端元数据都编码在签名的JWT中,使OP无需持久存储即可派生客户端信息。无状态注册更易于扩展,但限制了初始创建后更新注册的能力。

问:初始创建后可以更新客户端注册吗?

答:可以。客户端配置端点支持读取、更新和删除操作。您使用初始注册期间返回的注册访问令牌来验证这些操作。如果丢失了注册访问令牌,您可能需要重新注册。

问:如果OP拒绝我的注册请求会怎样?

答:OP返回带有适当错误代码的注册错误响应。常见原因包括无效的重定向URI格式、不支持的元数据字段或缺少必填字段。该标准定义了特定的错误代码以帮助诊断问题。

问:动态注册如何与原生移动应用配合使用?

答:原生应用可以像Web应用一样使用动态注册,但有一些重要注意事项。客户端密钥(如果颁发了)无法安全地存储在设备上。推荐的方法是使用带有PKCE的授权码流程,避免依赖客户端密钥。一些OP还颁发application_type: native特定的重定向URI,如自定义方案或回环接口重定向。

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注