配置动态客户端注册 (DCR)
动态客户端注册 (DCR) 允许开发者通过 开发者门户以编程方式注册 OAuth 2.0 客户端,而无需在身份提供程序中手动创建客户端。当开发者创建 OAuth 凭证时,门户会自动向配置的 DCR 提供程序注册客户端,并返回客户端 ID 和密钥。
先决条件
按照从 Dashboard 获取 Token创建 Token 并导出:
export API_KEY="a7ee-xxxxxxxxxxxxx"
DCR 提供商类型
API7 支持两种类型的 DCR 提供程序:
OIDC
OIDC 提供程序类型使用标准 RFC 7591 和 RFC 7592 协议。门户从身份提供商的 .well-known/openid-configuration端点中发现注册端 点。
支持的操作:
| 运营 | 协议 | 描述 |
|---|---|---|
| 注册客户 | RFC 7591 | POST 注册为端点。 |
| 更新客户端 | RFC 7592 | PUT 到 registration_client_uri 与 registration_access_token。 |
| 删除客户端 | RFC 7592 | DELETE 至 registration_client_uri。 |
| 旋转秘密 | 不支持 | OIDC 提供商不支持秘密轮换。 |
HTTP 桥
HTTP 桥接提供程序类型使用自定义 API 与不支持标准 DCR 协议的身份提供程序进行通信。你部署 HTTP 桥接服务,该服务在门户的 API 和你的身份提供商之间进行转换。
支持的操作:
| 运营 | 方法 | 端点 |
|---|---|---|
| 注册客户 | POST | {base_url}/clients |
| 更新客户端 | PUT | {base_url}/clients/{client_id} |
| 删除客户端 | DELETE | {base_url}/clients/{client_id} |
| 旋转秘密 | POST | {base_url}/clients/{client_id}/rotate-secret |
创建一个 DCR 提供者
OIDC 提供商
curl -k "https://localhost:7443/api/dcr_providers" \
-H "X-API-KEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "Keycloak Production",
"provider_type": "oidc",
"issuer": "https://keycloak.example.com/realms/my-realm",
"headers": {
"Authorization": "Bearer <initial-access-token>"
},
"desc": "Production Keycloak instance for OAuth client registration"
}'
如果你不在本地运行,请将 localhost 替换为你的仪表板主机。如果仪表板使用自签名 TLS 证书,则需要 -k 标志。
❶ name 是 DCR 提供商在提供商门户中显示的显示名称。
❷ provider_type 选择积分类型。使用 oidc 进行标准 OpenID Connect 动态客户端注册。
❸ OIDC 提供商需要 issuer。API7 从发行人的 /.well-known/openid-configuration 文档中发现注册端点。
❹ headers 允许你通过每个 DCR 请求发送自定义标头,例如 Keycloak 的初始访问令牌。
❺ desc 是可选的,可帮助运营商了解提供商的用途。
HTTP 桥接提供商
curl -k "https://localhost:7443/api/dcr_providers" \
-H "X-API-KEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "Custom OAuth Bridge",
"provider_type": "http_bridge",
"issuer": "https://issuer.example.com",
"provider_config": {
"base_url": "https://oauth-bridge.internal.example.com"
},
"headers": {
"X-API-Key": "<bridge-api-key>"
}
}'
❶ name 是 DCR 提供商在提供商门户中显示的显示名称。
❷ provider_type: "http_bridge" 告诉 API7 使用你的桥接服务而不是标准的 OIDC DCR 发现。
❸ issuer 标识桥代表的 OAuth 颁发者。
❹ provider_config.base_url 是 HTTP 桥接提供商所必需的,并指向你的桥接服务。
❺ headers 允许你将身份验证材料(例如 API 密钥)发送到桥接服务。
使用 DCR 配置 API 产品
创建 DCR 提供程序后,在 API 产品的身份验证配置中引用它:
curl -k -X PATCH "https://localhost:7443/api/api_products/{product_id}?portal_id={portal_id}" \
-H "X-API-KEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '[
{
"op": "replace",
"path": "/auth",
"value": {
"dcr": {
"dcr_provider_id": "<dcr-provider-id>"
}
}
}
]'
你可以启用 DCR 以及其他身份验证类型(密钥身份验证、基本身份验证)。
示例:Keycloak 集成
以下步骤演示了将 Keycloak 集成为 DCR 提供程序:
-
在Keycloak中创建初始访问令牌: — 登录 Keycloak 管理控制台。 — 导航到你领域的 客户端 > 初始访问令牌。 — 创建具有所需到期时间和最大客户端数量的令牌。
-
在 API7 中创建 DCR 提供程序:
curl -k "https://localhost:7443/api/dcr_providers" \
-H "X-API-KEY: ${API_KEY}" \
-H "Content-Type: application/json" \
-d '{
"name": "Keycloak",
"provider_type": "oidc",
"issuer": "https://keycloak.example.com/realms/my-realm",
"headers": {
"Authorization": "Bearer <keycloak-initial-access-token>"
}
}' -
创建具有 DCR 认证的 API 产品并发布。
-
开发者在开发者门户中创建 OAuth 凭证。每个凭证创建都会在 Keycloak 中注册一个新客户端。
-
开发者使用客户端 ID 和密钥向 Keycloak 请求访问令牌,然后使用令牌通过网关调用 API 。
删除保护
在以下情况下,无法删除 DCR 提供程序:
- 任何 API 产品都会在其身份验证配置中引用它。
- 任何开发者凭证都与其关联。
在删除提供者之前删除所有引用。
OIDC 发现缓存
对于 OIDC 提供商,门户缓存 OpenID Connect 发现文档(包含注册端点URL)。缓存采用LRU策略,24小时TTL,最多128个条目。这最大限度地减少了发送到身份提供商的发现请求的数量。