配置开发者门户
部署开发者门户后,在 Provider Portal 中配置门户设置,以控制访问、身份认证和开发者管理。
门户设置
门户设置在 Provider Portal 中每个门户的 Settings 页面下进行管理,并分为以下部分。
公共访问
Public Access 开关控制未经过身份认证的用户能否访问开发者门户:
- Enabled:未经过身份认证的访问者可以浏览 API Hub 并查看公开 API 产品。
- Disabled:所有访问者必须先完成身份认证,才能访问门户内容。
门户 Token
门户 Token 用于开发者门户应用程序向门户 API 进行身份认证。每个 Token 都以 a7prt 为前缀,并且可以配置过期日期。
| 操作 | 描述 |
|---|---|
| Generate | 创建一个带有名称和可选过期日期的新 Token。Token 值仅在创建时显示。 |
| Rename | 更新 Token 的显示名称。 |
| Regenerate | 生成新 Token 值并使原 Token 值失效。使用新 Token 更新开发者门户的 config.yaml,然后重启应用程序。 |
| Delete | 删除 Token。如果开发者门户正在使用该 Token,它将失去与门户 API 的连接。 |
重新生成或删除 Token 后,请更新开发者门户主机上的 config.yaml 并重启应用程序。没有有效 Token 时,门户将无法正常运行。
内置身份认证
内置身份认证选项控制开发者门户上的电子邮件和密码注册与登录。
| 设置 | 描述 |
|---|---|
| Enable self-registration | 启用后,开发者可以直接在开发者门户注册。禁用后,只能通过邀请或外部身份提供商添加开发者。 |
| Registration auto-approval | 启用后,新开发者账户会立即激活。禁用后,管理员必须在 Provider Portal 中审批每个注册请求。 |
| Login with email | 启用后,开发者可以使用电子邮件地址登录。 |
可以完全启用或禁用内置身份认证选项。禁用它会从开发者门户中删除电子邮件/密码登录选项。至少一个登录选项(内置或 SSO)必须保持启用状态。
SSO(外部登录选项)
外部身份提供商原本用于为开发者门户提供额外的登录选项,但已发布的控制台与控制面目前为该配置暴露了相互冲突的 API 契约。尝试配置外部身份提供商前,请先参阅开发者门户 SSO 状态。
SCIM 预配
SCIM(跨域身份管理系统)可以将外部身份提供商中的身份同步到自定义开发者门户。已发布的前端未注册 SCIM 插件,因此更改 Provider Portal 设置不会启用该端点。
如需基于公开 Boilerplate 自定义实现,请参阅使用 Okta 为自定义开发者门户配置 SCIM 预配。该流程会添加服务端插件、声明预配凭据并更新数据库 schema。组织成员关系和应用访问权限需要另行与门户授权模型集成。
应用程序配置
以下设置是在开发者门户的 config.yaml 文件中配置的,需要重启才能生效。
门户 API 连接
portal:
url: https://<CONTROL_PLANE_HOST>:4321 # 门户 API 端点
token: a7prt-xxxxxxxxxxxx # 从 Provider Portal 获取的门户 Token
数据库
db:
url: "postgres://user:password@host:5432/dbname"
开发者门户使用 PostgreSQL 兼容的数据库来存储用户会话、身份认证数据和组织信息。
身份认证密钥
auth:
secret: "<base64-encoded-secret>"
此密钥用于签署身份认证会话。使用以下命令生成密钥:
openssl rand -base64 32
应用程序 URL
app:
name: "My Developer Portal" # 显示在浏览器标题和页眉中
desc: "API documentation portal" # 用作 SEO 元描述
baseURL: "https://portal.example.com"
trustedOrigins:
- "https://portal.example.com"
环境变量替换
配置值支持环境变量替换:
| 语法 | 行为 |
|---|---|
${VAR} | 必填。如果未设置变量,配置将失败。 |
${VAR:default} | 可选。如果未设置变量,则使用默认值。 |
示例:
portal:
url: ${PORTAL_API_URL}
token: ${PORTAL_TOKEN}
auth:
secret: ${AUTH_SECRET}