Skip to content

第三方连接账户

Connected Accounts 是 OpenEdge 的凭据和授权中心。用户可以先连接外部 provider,再在多个服务实例中复用这些连接。

为什么需要它

如果没有连接账户,每个服务都要单独保存 provider key、webhook token 或 OAuth token。这样不利于安全、轮换和用户理解。

Connected Accounts 统一管理:

  • Provider 目录。
  • 加密 API Key 存储。
  • 连接状态。
  • Scope 和 provider 元数据。
  • 测试和审计事件。
  • OAuth 授权流程。

支持的 Provider

Provider授权方式状态用途
OpenAI-compatibleAPI Key可用AI 大模型网关
OpenRouterAPI Key可用AI 大模型网关
DeepSeekAPI Key可用AI 大模型网关
Custom API KeyAPI Key可用AI、Webhook Push、插件
Telegram BotAPI Key可用Webhook Push
SlackOAuth/webhook规划中消息推送
GitHubOAuth规划中开发者自动化
DiscordOAuth可用社群自动化身份授权

控制台流程

  1. 打开控制台。
  2. 进入 Connections。
  3. 选择 provider。
  4. 输入显示名称和 API Key。
  5. 可选填写 provider base URL。
  6. 保存并测试连接。
  7. 在 AI Model Gateway 或 Webhook Push 的服务配置中选择该连接。

Discord 连接通过 Provider Catalog 里的 Connect 发起。OpenEdge 会跳转到 Discord 授权页,回调时校验 OAuth state,加密保存 token,并把 Discord user id/name 作为 provider 元数据保存。

API 路由

控制台路由需要登录态:

http
GET    /console/connections/providers
GET    /console/connections
POST   /console/connections/api-key
POST   /console/connections/:id/test
DELETE /console/connections/:id
GET    /console/connections/:provider/start
GET    /oauth/connections/:provider/callback

创建 API Key 连接示例:

json
{
  "provider": "openrouter",
  "display_name": "OpenRouter Production",
  "credentials": {
    "api_key": "sk-or-..."
  },
  "config": {
    "base_url": "https://openrouter.ai/api/v1"
  },
  "scopes": ["chat"]
}

响应不会返回明文密钥:

json
{
  "success": true,
  "data": {
    "id": "conn_...",
    "provider": "openrouter",
    "auth_type": "api_key",
    "display_name": "OpenRouter Production",
    "status": "active",
    "credentials": {
      "api_key": "configured...[REDACTED]"
    }
  }
}

Discord OAuth 需要配置以下 Worker secret/config:

text
DISCORD_CLIENT_ID
DISCORD_CLIENT_SECRET
CONFIG_ENCRYPTION_KEY
FRONTEND_URL

如果没有设置自定义 DISCORD_OAUTH_REDIRECT_URI,需要在 Discord Developer Portal 注册这个回调地址:

text
https://api.open4x.com/oauth/connections/discord/callback

服务引用

服务实例通过 connected_account_id 引用连接:

json
{
  "connected_account_id": "conn_..."
}

运行时 OpenEdge 会检查:

  • 连接是否属于当前用户。
  • 连接状态是否为 active。
  • provider 类型是否允许被当前服务使用。
  • 加密凭据是否能解密。
  • base_url 等配置是否通过安全校验。

安全要求

  • 明文 API Key 只存在于请求内存中。
  • 加密凭据保存在 D1。
  • 加密密钥必须配置为 CONFIG_ENCRYPTION_KEY
  • OAuth callback 使用保存在 connection_oauth_states 的一次性 state。
  • 删除或禁用的连接不能继续被服务调用。
  • 连接测试只保存摘要,不保存完整上游响应。