动态客户机注册

动态客户机注册允许 OpenID Connect (OIDC) 依赖方 (RP) 向 OpenID Connect 提供者 (OP) 注册自身。

准备工作

动态客户端注册基于 OpenID Connect动态客户端注册 1.0 规范

新的 OIDC 应用程序由租户管理员或具有对租户的管理访问权的用户创建。 现在,具有正确权利的 API 客户机还可以通过动态客户机注册端点创建 OIDC 应用程序。 创建的应用程序是一个“自定义应用程序”,其登录方式设置为 OpenID Connect。

动态客户机注册端点位于以下位置:https://{{tenant}}/v1.0/endpoint/default/client_registration

如果符合您的需求,请考虑使用新的动态客户端注册端点。 如需了解更多信息,请参阅 《使用新的 OpenID Connect提供程序进行动态客户端注册 》。

关于此任务

要动态注册客户端,请先获取初始访问令牌,然后使用注册 API 注册新的 OIDC 应用程序。

在注册新客户之前,请检查动态客户注册设置。

动态客户端注册设置

可以配置动态客户端注册设置,以设定动态客户端注册的默认值。 请参阅 “配置 OIDC 动态客户端注册设置 ”。

下表介绍了相关设置。

字段 描述
授权类型 如果动态客户端注册负载中未指定,则应使用以下资助类型。 支持的授权类型包括“授权码”、“隐式授权”、“密码”、“设备流”、“JWT Bearer”和“刷新令牌”。
标识令牌声明 如果动态客户端注册负载中未指定,则默认使用 ID 令牌和用户信息。
令牌声明 如果动态客户端注册负载中未指定,则默认使用内省和 JWT 访问令牌。
访问令牌类型 要生成的访问令牌的类型。 有效值为“default”和“JWT”。
标识令牌签名算法 如果动态客户端注册负载中未指定,则使用该算法对 ID 令牌进行签名。
用户许可 选择是否在动态客户端注册负载中未指定时请求用户同意。
访问令牌生存期 访问令牌的有效期(以秒为单位)。 最大值为 2147483647,最小值为 1。
刷新令牌生命周期 刷新令牌的有效期(以秒为单位)。 最大值为 2147483647,最小值为 1。
实施 PKCE 验证 选择是否在动态客户端注册负载中未指定时强制执行 PKCE。
授予所有用户权限 如果动态客户端注册负载中未作指定,请确定所有用户是否都有权使用此客户端。
允许定制客户机凭证 确定是否允许使用自定义客户端凭据。 如果设置为“false”,则无法在动态客户端注册负载中指定客户端 ID 和密钥。

设置中的“软件声明”、“请求授权”和“注册访问令牌”部分与此 OpenID Connect 提供商无关。

获取初始访问令牌

要访问动态客户机注册端点,请使用具有 Manage OIDC client registration dynamically 权利的访问令牌。

创建具有 Manage OIDC client registration dynamically 权利的 API 客户机。 要创建 API 客户端,请参阅 “创建 API 客户端 ”。

创建 API 客户机后,使用 client_credentials 流以获取访问令牌。 请参阅以下示例:

curl -ki -v https://{{tenant}}/v1.0/endpoint/default/`token -d "grant_type=client_credentials&client_id=<clientId>&client_secret=<clientSecret>"

使用注册 API 注册新应用程序

通过使用先前部分中生成的访问令牌,您可以创建新的 OIDC 应用程序。

下表显示当前支持的客户机元数据的列表。

元数据名称 元数据描述 可选 有效值
client_name 应用程序名称 true 字符串
client_id 如果未提供客户机标识,那么将自动生成客户机标识。 true 字符串
client_secret 如果未提供客户机密钥,那么将自动生成客户机密钥。 true 字符串
redirect_uris 重定向 URI 的列表。 false 字符串 URI 的列表
grant_types 应用程序可使用的授权类型的数组。 true “authorization_code”、“implicit”、“password”、“urn:ietf:params:oauth:grant-type:device_code”、“urn:ietf:params:oauth:grant-type:jwt-bearer”和“refresh_token”
id_token_signed_response_alg 令牌签名算法。 true 'RS256', 'RS384', 'RS512', 'HS256', 'HS384', 'HS512', 'ES256', 'ES384', 'ES512', 'PS256', 'PS384', 'PS512'
all_users_entitled 如果所有用户都有权使用此应用程序,请设置为 true。 true true 或 false
jwks_uri 客户机的 JSON Web 密钥集文档的 URL。 true URL
consent_action 请求用户同意。 true “never_prompt”或“always_prompt”
enforce_pkce 强制使用 PKCE。 true true 或 false
id_token_claims d_token 和用户信息的声明列表。 true 字符串列表
token_claims 内省和 JWT 访问令牌的声明列表。 true 字符串列表
initiate_login_uri 用于启动登录的 URL。 true URL
token_endpoint_auth_method 令牌端点的客户机认证方法。 true 'default'、'client_secret_basic'、'client_secret_post'、'client_secret_jwt' 和 'private_key_jwt'

注册新应用程序的示例

curl -ki -H "Authorization: bearer <access-token>" -H "Content-Type:application/json" -X POST https://{{tenant}}/v1.0/endpoint/default/client_registration --data-binary '{"redirect_uris":["https://www.redirect.com"],"client_name":"MyApplication"}'
响应
{
	"grant_types": [
		"authorization_code"
	],
	"client_secret_expires_at": "0",
	"registration_client_uri": "https://{{tenant}}/v1.0/endpoint/default/client_registration/<clientId>",
	"client_secret": "<client_secret>",
	"redirect_uris": [
		"https://www.redirect.com"
	],
	"client_id_issued_at": "1586933118",
	"client_name": "MyApplication",
	"registration_access_token": "<access_token>",
	"client_id": "<clientId>",
	"id_token_signed_response_alg": "RS256"
}

应用程序的进一步配置

创建应用程序后,您可以为其配置更多选项,例如属性映射、访问策略、身份来源、授权用户等。 要配置这些选项,请参阅在 OpenID Connect 提供者中配置单点登录

不支持使用注册 API 的更新选项。

使用注册 API 读取 OIDC 应用程序

注册 API 还提供一种方式以重新读取 OIDC 应用程序。
curl -ki -H "Authorization: bearer <registration-access-token>" https://{{tenant}}/v1.0/endpoint/default/client_registration/<clientId>

使用注册 API 删除 OIDC 应用程序

注册 API 还提供一种方式以删除 OIDC 应用程序。

curl -ki -H "Authorization: bearer <registration-access-token>" -X DELETE https://{{tenant}}/v1.0/endpoint/default/client_registration/<clientId>

注册访问令牌已到期

如果注册访问令牌到期,请获取新的访问令牌。 请参阅 “获取初始访问令牌 ”。