我们要构建什么
一个位于 Agent 和现有服务之间的网关。Agent 使用 ATH 协议与网关通信;网关使用标准 OAuth 与上游服务通信。上游服务不需要任何改动。开始之前
你需要什么
| 需求 | 为什么需要 | 详情 |
|---|---|---|
| 网关的可达 URL | 用户在(例如)GitHub 的授权界面批准后,GitHub 会将用户浏览器重定向到 https://your-gateway.com/ath/callback。GitHub 必须能到达这个 URL。 | 本地开发:如果你将 http://localhost:4001 注册为回调 URL,则它可以正常工作。生产环境:需要公网 URL。 |
| 每个提供商的 OAuth 凭据 | 网关充当每个提供商的 OAuth 客户端。你需要在提供商处注册一个”应用”,获取客户端 ID 和密钥。 | 在提供商的开发者控制台操作——例如 GitHub 的”OAuth Apps”设置。参见下方步骤 3。 |
为什么网关需要可达?
为什么网关需要可达?
以下是用户授权过程中发生的事情:用户在 GitHub 上点击”批准”后,GitHub 告诉用户浏览器跳转到回调 URL。如果浏览器无法到达该 URL,流程就会中断。
- 本地开发:
http://localhost:4001可以正常工作,因为浏览器在同一台机器上 - 生产环境: 网关需要一个用户浏览器可达的 URL(不需要 GitHub 服务器能直接访问——这是浏览器重定向,不是服务器间调用)
你不需要什么
- ❌ 对上游服务的改动——这就是网关的意义
- ❌ Agent 的公网 URL——Agent 向外连接网关,无需接收入站连接
- ❌ Agent 的身份文档(开发环境中)——网关的
skipAttestationVerification意味着网关不会尝试获取 Agent 的公钥 - ❌ 深入的 OAuth 或安全知识——每个提供商填 6 个字段,网关处理其余一切
何时使用网关(对比原生模式)
为什么网关模式下 Agent 不需要公网 URL?
为什么网关模式下 Agent 不需要公网 URL?
在原生模式中,服务器从
agent_id URL 获取 Agent 的身份文档来验证公钥。这要求该 URL 从服务器可达。在网关模式中使用 skipAttestationVerification: true(开发环境),网关完全不获取身份文档。在生产环境中,你可以通过网关的注册表配置信任特定 Agent——网关仍然验证 Agent 的认证 JWT,但你可以配置密钥解析而无需 Agent 托管公网 URL。底线: 如果你在笔记本电脑上构建 Agent 且无法暴露公网 URL,网关模式是最简单的路径。步骤 1:运行网关
选项 A:从源码
选项 B:Docker
http://localhost:4001。
步骤 2:创建网关用户
网关支持多租户——每个用户有独立的 Agent 注册。创建一个管理员用户:token——管理操作会用到它。
步骤 3:添加提供商
在网关目录中创建providers.json,填入你的 OAuth 提供商详情:
这 6 个字段从哪里来?
这 6 个字段从哪里来?
| 字段 | 在哪里找 |
|---|---|
display_name | 你想怎么叫都行 |
available_scopes | 提供商的文档(如 GitHub scopes) |
authorize_endpoint | 提供商的 OAuth 文档——用户被引导到此 URL 进行授权 |
token_endpoint | 提供商的 OAuth 文档——授权码在此处交换令牌 |
api_base_url | 提供商 API 的根 URL |
client_id / client_secret | 在提供商处注册 OAuth 应用时创建 |
如何在 GitHub 注册 OAuth 应用?
如何在 GitHub 注册 OAuth 应用?
- 前往 GitHub → Settings → Developer settings → OAuth Apps → New OAuth App
- Application name 随意填写(如 “ATH Gateway”)
-
Homepage URL 设为你的网关 URL(如
http://localhost:4001) -
Authorization callback URL 设为网关的回调地址:
http://localhost:4001/ath/callback⚠️ 必须完全匹配。 用户在 GitHub 批准后,GitHub 告诉用户浏览器重定向到这个 URL。如果与网关发送的不匹配,GitHub 会拒绝重定向,你会看到”redirect_uri mismatch”错误。 - 点击 Register application
- 复制 Client ID 并点击 Generate a client secret
-
将两个值填入你的
providers.json
https://your-gateway.com/ath/callback,然后复制凭据。