认证

向 Agent 认证及登出

ACP 认证在初始化期间协商。Agent 在 authMethods 中声明可用的认证方法。客户端仅在 Agent 声明了认证面时使用 auth/loginauth/logout

声明认证

Agent 在 initialize 响应的 authMethods 字段中声明认证选项。每个方法有一个 methodId,客户端在后续的 auth/login 请求中将其传回 Agent。

authMethods 中返回一个或多个有效条目即声明了认证面。这样做的 Agent 必须 同时实现 auth/loginauth/logout。如果 authMethods 被省略或为空,Agent 不声明此面,客户端 不得 调用这两个方法中的任何一个。

capabilities.auth 与此要求正交。它声明认证相关的扩展,而不是基线 auth/loginauth/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/loginauth/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"
  }
}
参数类型必需描述
methodIdstring要使用的认证方法 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 错误。

客户端 应该 准备好活动会话操作在登出后因认证相关错误而失败,并应在适当时提示用户重新认证。