Skip to main content
这些语义使选择时和运行时的 auth 行为保持一致。它们被以下部分共享:
  • resolveAuthProfileOrder(配置文件排序)
  • resolveApiKeyForProfile(运行时凭据解析)
  • openclaw models status --probe
  • openclaw doctor auth 检查(doctor-auth

稳定的探测原因码

探测结果包含一个 status 桶(okauthrate_limitbillingtimeoutformatunknownno_model),以及在探测未到达模型调用时使用的稳定 reasonCode 资格检查会将可用凭据的原因码报告为 ok

Token 凭据

Token 凭据(type: "token")支持内联 token 和/或 tokenRef

资格规则

  1. tokentokenRef 都缺失时,Token 配置文件不符合资格(missing_credential)。
  2. expires 是可选项。存在时,它必须是一个有限的 Unix epoch 毫秒数,且大于 0,并且不大于 JavaScript Date 的最大时间戳(8640000000000000)。
  3. 如果 expires 无效(类型错误、NaN0、负数、非有限值,或超过该最大值),则该配置文件不符合资格,错误为 invalid_expires
  4. 如果 expires 已经过期,则该配置文件不符合资格,错误为 expired
  5. tokenRef 不会绕过 expires 校验。

解析规则

  1. 解析器语义与 expires 的资格语义一致。
  2. 对于符合资格的配置文件,token 材料可以从内联值或 tokenRef 中解析。
  3. 无法解析的引用会在 models status --probe 输出中产生 unresolved_ref

Agent 复制可移植性

Agent auth 继承采用读透式。当某个 agent 没有本地配置文件时,它会在运行时从默认/主 agent 存储中解析配置文件,而不会将密钥材料复制到自身的凭据存储中(agents/<agentId>/agent/openclaw-agent.sqlite)。 显式复制流程(例如 openclaw agents add)使用此可移植性策略:
  • api_keytoken 配置文件是可移植的,除非 copyToAgents: false
  • oauth 配置文件默认不可移植,因为刷新令牌可能是一次性的或对轮换敏感。
  • 仅当已知跨 agent 复制刷新材料是安全的时候,Provider 拥有的 OAuth 流程才可以通过 copyToAgents: true 选择启用;该显式启用仅在配置文件携带内联的访问/刷新材料时生效。
不可移植的配置文件仍可通过读透式继承使用,除非目标 agent 单独登录并创建自己的本地配置文件。

仅配置的 auth 路由

auth.profilesmode: "aws-sdk" 的条目是路由元数据,不是存储的凭据。它们在目标提供方使用 models.providers.<id>.auth: "aws-sdk" 时有效,这是插件拥有的 Amazon Bedrock 配置所写入的路由。这些 profile id 可能会出现在 auth.order 和会话覆盖中,即使凭据存储中没有匹配的条目。 不要在凭据存储中写入 type: "aws-sdk";存储的凭据只能是 api_keytokenoauth。如果旧版 auth-profiles.json 中有这样的标记,openclaw doctor --fix 会将其移到 auth.profiles,并从存储中移除该标记。

显式 auth 顺序过滤

  • 当为某个提供方设置了 auth.order.<provider> 或 auth-store 顺序覆盖时,models status --probe 只会探测该提供方解析后的 auth 顺序中仍保留的配置文件 id。已存储的覆盖优先于 auth.order 配置。
  • 该提供方已存储但未包含在显式顺序中的配置文件不会在之后被静默尝试。探测输出会以 reasonCode: excluded_by_auth_order 报告该配置文件,详细信息为 Excluded by auth.order for this provider.
  • 有效的会话用户固定配置是一个明确的每会话例外:即使该配置文件未包含在提供方顺序中,OpenClaw 也会先尝试该配置文件,然后使用按顺序排列的同提供方配置文件作为重试候选项。冷却或禁用窗口只适用于受影响的配置文件;不会抑制其符合资格的同级配置文件。

探测目标解析

  • 探测目标可以来自认证配置文件、环境凭据或 models.json(结果 sourceprofileenvmodels.json)。
  • 如果某个提供方有凭据,但 OpenClaw 无法为其解析出可探测的模型候选项,则 models status --probe 会报告 status: no_model,并带有 reasonCode: no_model

外部 CLI 凭据发现

  • 仅在提供方、运行时或 auth 配置文件处于当前操作的作用域内,或者该外部来源对应的本地已存储配置文件已存在时,才会发现由外部 CLI 持有的仅运行时凭据(claude-cli 对应 Claude CLI,openai 对应 Codex CLI,minimax-portal 对应 MiniMax CLI)。
  • Auth-store 调用方会选择明确的外部 CLI 发现模式:none 表示仅使用持久化/插件认证,existing 表示刷新已存储的外部 CLI 配置文件,或 scoped 表示针对具体的提供方/配置文件集合。
  • 只读/状态路径传递 allowKeychainPrompt: false;它们仅使用基于文件的外部 CLI 凭据,不读取或重用 macOS Keychain 的结果。

OAuth SecretRef 策略保护

SecretRef 输入仅用于静态凭据。OAuth 凭据是在运行时可变的(刷新流程会持久化轮换后的令牌),因此由 SecretRef 支持的 OAuth 材料会将可变状态分散到不同的存储中。
  • 如果某个 profile 凭据的 type"oauth",则该 profile 上任何凭据材料字段都将拒绝使用 SecretRef 对象。
  • 如果 auth.profiles.<id>.mode"oauth",则该 profile 的 SecretRef 支持的 keyRef/tokenRef 输入将被拒绝。
  • 违规将导致硬失败(抛出错误),发生在启动/重新加载密钥准备和 profile 解析路径中。

向后兼容消息

为兼容脚本,探测错误保持第一行不变: Auth profile credentials are missing or expired. 人类可读的详细信息和稳定的原因代码会在后续行中以 ↳ Auth reason [code]: ... 的形式给出。

相关内容