认证
向 Agent 认证及登出
ACP 认证在初始化期间协商。Agent 在 authMethods 中声明可用的认证方法。客户端仅在 Agent 声明了认证面时使用 auth/login 和 auth/logout。
声明认证
Agent 在 initialize 响应的 authMethods 字段中声明认证选项。每个方法有一个 methodId,客户端在后续的 auth/login 请求中将其传回 Agent。
在 authMethods 中返回一个或多个有效条目即声明了认证面。这样做的 Agent 必须 同时实现 auth/login 和 auth/logout。如果 authMethods 被省略或为空,Agent 不声明此面,客户端 不得 调用这两个方法中的任何一个。
capabilities.auth 与此要求正交。它声明认证相关的扩展,而不是基线 auth/login 和 auth/logout 方法的可用性。
{
"jsonrpc": "2.0",
"id": 0,
"result": {
"protocolVersion": 2,
"capabilities": {},
"authMethods": [
{
"methodId": "agent-login",
"name": "Agent login",
"type": "agent",
"description": "Sign in using the agent's login flow"
}
]
}
}
由于此响应包含有效的认证方法,Agent 必须同时支持 auth/login 和 auth/logout。
认证方法类型
标准认证方法类型为 agent,即由 Agent 自行处理认证。每个认证方法必须包含 type 判别字段:
{
"methodId": "agent-login",
"name": "Agent login",
"type": "agent",
"description": "Sign in using the agent's login flow"
}
认证方法的 type 值可以是自定义或未来变体。自定义方法类型 必须 以 _ 开头。未知的非下划线方法类型保留给未来的 ACP 变体。不理解方法类型的客户端在存储、重放、代理或转发初始化数据时应保留原始方法负载,否则忽略该方法或以通用方式显示。
完整稳定的 AuthMethod 定义请参阅 schema。
认证
当 Agent 已声明认证面且在允许创建会话之前要求认证时,客户端使用声明的认证方法 ID 之一调用 auth/login:
{
"jsonrpc": "2.0",
"id": 1,
"method": "auth/login",
"params": {
"methodId": "agent-login"
}
}
| 参数 | 类型 | 必需 | 描述 |
|---|---|---|---|
methodId | string | 是 | 要使用的认证方法 ID。此值必须与 initialize 响应中声明的方法之一匹配。 |
成功时,Agent 返回空结果:
{
"jsonrpc": "2.0",
"id": 1,
"result": {}
}
成功认证后,客户端可以创建新会话,而不会在认证门控请求上收到 auth_required 错误。
登出
auth/logout 方法允许客户端结束当前认证状态。客户端仅在 Agent 在初始化期间声明了一个或多个有效认证方法时才可调用此方法;没有单独的登出能力标记。
{
"jsonrpc": "2.0",
"id": 2,
"method": "auth/logout",
"params": {}
}
成功时,Agent 返回空结果:
{
"jsonrpc": "2.0",
"id": 2,
"result": {}
}
成功执行 auth/logout 后,需要认证的新会话将要求客户端再次调用 auth/login。
活动会话
协议不保证 auth/logout 后正在运行的会话会发生什么。Agent 可能终止它们、保持运行,或对未来的会话活动返回 auth_required 错误。
客户端 应该 准备好活动会话操作在登出后因认证相关错误而失败,并应在适当时提示用户重新认证。