认证

向 Agent 认证及登出

ACP 认证在初始化期间协商。Agent 在 authMethods 中宣告可用的认证方法,客户端通过调用 authenticate 选择一种方法,支持结束认证状态的 Agent 则宣告 logout 能力。

ACP 认证流程

Agent 在 initialize 响应的 authMethods 字段中宣告认证选项。每个方法有一个 id,客户端在后续的 authenticate 请求中将其传回 Agent。支持 logout 的 Agent 还宣告 agentCapabilities.auth.logout

{
  "jsonrpc": "2.0",
  "id": 0,
  "result": {
    "protocolVersion": 1,
    "agentCapabilities": {
      "auth": {
        "logout": {}
      }
    },
    "authMethods": [
      {
        "id": "agent-login",
        "name": "Agent login",
        "description": "Sign in using the agent's login flow"
      }
    ]
  }
}

如果 agentCapabilities.auth.logout 被省略或为 null,则 Agent 不支持 logout,客户端不得调用它。提供 {} 表示 Agent 支持该方法。

认证方法类型

默认的认证方法类型为 agent,即由 Agent 自行处理认证。当没有 type 存在时,该方法被视为 agent

{
  "id": "agent-login",
  "name": "Agent login",
  "description": "Sign in using the agent's login flow"
}

显式的 "type": "agent" 也可接受但不是必需的。参见 schema 获取完整的稳定 AuthMethod 定义。

认证

当 Agent 在允许创建会话之前要求认证时,客户端使用宣告的某个认证方法 ID 调用 authenticate

{
  "jsonrpc": "2.0",
  "id": 1,
  "method": "authenticate",
  "params": {
    "methodId": "agent-login"
  }
}
参数类型必需描述
methodIdstring要使用的认证方法的 ID。此值必须与 initialize 响应中宣告的方法之一匹配。

成功时,Agent 返回空结果:

{
  "jsonrpc": "2.0",
  "id": 1,
  "result": {}
}

认证成功后,客户端可以创建新会话而不会收到针对认证门控请求的 auth_required 错误。

登出

logout 方法允许客户端结束当前认证状态。客户端应仅在验证 Agent 在初始化期间宣告了 agentCapabilities.auth.logout 之后才调用它。

{
  "jsonrpc": "2.0",
  "id": 2,
  "method": "logout",
  "params": {}
}

成功时,Agent 返回空结果:

{
  "jsonrpc": "2.0",
  "id": 2,
  "result": {}
}

成功 logout 后,需要认证的新会话将要求客户端再次调用 authenticate

活跃会话

协议不保证 logout 后对已在运行的会话会发生什么。Agent 可能终止它们、保持运行,或对未来的会话活动返回 auth_required 错误。客户端应当准备好活跃会话操作在登出后因认证相关错误而失败,并应在适当时提示用户再次认证。