跳到主要内容
版本:3.10.x

配置动态客户端注册 (DCR)

动态客户端注册 (DCR) 允许开发者通过 开发者门户以编程方式注册 OAuth 2.0 客户端,而无需在身份提供程序中手动创建客户端。当开发者创建 OAuth 凭证时,门户会自动向配置的 DCR 提供程序注册客户端,并返回客户端 ID 和密钥。

先决条件

按照管理 Token创建 Token 并导出:

export API_KEY="a7ee-xxxxxxxxxxxxx"

DCR 提供商类型

API7 支持两种类型的 DCR 提供程序:

OIDC

OIDC 提供程序类型使用标准 RFC 7591RFC 7592 协议。门户从身份提供商的 .well-known/openid-configuration端点中发现注册端点。

支持的操作:

运营协议描述
注册客户RFC 7591POST 注册为端点。
更新客户端RFC 7592PUTregistration_client_uriregistration_access_token
删除客户端RFC 7592DELETEregistration_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 提供程序:

  1. 在Keycloak中创建初始访问令牌: — 登录 Keycloak 管理控制台。 — 导航到你领域的 客户端 > 初始访问令牌。 — 创建具有所需到期时间和最大客户端数量的令牌。

  2. 在 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>"
    }
    }'
  3. 创建具有 DCR 认证的 API 产品并发布。

  4. 开发者在开发者门户中创建 OAuth 凭证。每个凭证创建都会在 Keycloak 中注册一个新客户端。

  5. 开发者使用客户端 ID 和密钥向 Keycloak 请求访问令牌,然后使用令牌通过网关调用 API。

删除保护

在以下情况下,无法删除 DCR 提供程序:

  • 任何 API 产品都会在其身份验证配置中引用它。
  • 任何开发者凭证都与其关联。

在删除提供者之前删除所有引用。

OIDC 发现缓存

对于 OIDC 提供商,门户缓存 OpenID Connect 发现文档(包含注册端点URL)。缓存采用LRU策略,24小时TTL,最多128个条目。这最大限度地减少了发送到身份提供商的发现请求的数量。

其他资源