1Password
OpenClaw 通过四种独立方式与 1Password 配合使用:
- 配置机密:
openclaw.json中的任何 SecretRef 字段都可以在运行时通过opCLI 解析,因此 API 密钥永远不会存在于配置文件中。 - 代理工作流: 捆绑的
1password技能会教代理如何登录,并使用op读取或注入机密以完成它们自己的任务。 - 桌面环境: 官方 1Password MCP 服务器为交互式桌面代理提供对 1Password Environments 的经批准访问。
- 浏览器登录:
claude-cli后端可以使用 Claude Code 的 Chrome 集成与 1Password for Claude,使代理能够登录网站,而密码永远不会到达模型或 OpenClaw。
要求¶
- 网关主机上安装了 1Password CLI(
op)。 - 一个用于无人值守插件路径的 1Password 服务账户。
- 对于直接技能工作流,需要以下三者之一:服务账户、桌面应用集成或独立的
op signin。
通过插件解析配置机密¶
启用捆绑的插件并创建其服务账户令牌文件。首先,在你要运行以下命令的 shell 中,将服务账户的令牌导出为 OP_SERVICE_ACCOUNT_TOKEN——该代码块会将该值写入磁盘,然后将其从环境中清除,因此如果没有该变量,你会得到一个空的令牌文件:
openclaw plugins enable onepassword
mkdir -p ~/.openclaw/credentials/onepassword
chmod 700 ~/.openclaw/credentials/onepassword
printf '%s' "$OP_SERVICE_ACCOUNT_TOKEN" > \
~/.openclaw/credentials/onepassword/service-account-token
chmod 600 ~/.openclaw/credentials/onepassword/service-account-token
unset OP_SERVICE_ACCOUNT_TOKEN
当设置了 OPENCLAW_STATE_DIR 时,请使用该目录而非 ~/.openclaw。然后生成并应用一个 SecretRef 计划:
openclaw onepassword secretref setup \
--openai-id op://Automation/OpenAI/credential \
--anthropic-id op://Automation/Anthropic/credential \
--plan-out ./openclaw-1password-secrets-plan.json
openclaw onepassword secretref status
openclaw secrets apply --from ./openclaw-1password-secrets-plan.json --dry-run --allow-exec
openclaw secrets apply --from ./openclaw-1password-secrets-plan.json --allow-exec
openclaw secrets audit --check --allow-exec
openclaw secrets reload
setup 命令至少需要一个目标。在计划应用之前,status 可能会报告提供商未配置,同时仍报告 prerequisites ready: yes;应用之后,ready: yes 确认提供商、受信任的 op 可执行文件以及被接受的非空令牌文件都已就绪。
该插件接受原生的 op://<vault>/<item>/<field> 和 op://<vault>/<item>/<section>/<field> 引用。它只解析已注册的 OpenClaw 凭据目标,限制并行的 op read 调用,并强制关闭桌面应用集成。有关手动配置、自定义目标以及单独的受审计代理工具,请参阅插件指南。
面向代理的 1password 技能¶
OpenClaw 捆绑了一个 1password 技能,教代理选择可用的认证模式、验证访问权限,并优先使用 op run 或 op inject,而不是将机密值写入磁盘。
代理将其用于有意超出插件狭义契约的工作流,例如创建或轮换条目,或将凭据注入到一次性命令中。当某个凭据已经连接到 OpenClaw SecretRef 目标时,应由所属的 OpenClaw 工作流来解析它;代理无需直接调用 op。
官方 1Password MCP 服务器¶
官方 MCP 服务器是面向 1Password Environments 的测试版桌面工作流。它需要 1Password 桌面应用,并且每次交互都需要明确批准。它可以管理环境变量名称,并通过内存中的 .env 文件将值挂载到本地进程中;机密值不会返回给 MCP 客户端或模型。
它不提供对任意保管库条目的无头服务账户访问,OpenClaw 插件也不会调用它。如果 MCP 管理的 Environment 在启动 OpenClaw 时已经挂载了变量,请对这些值使用 OpenClaw 的 env SecretRef。当网关本身应在启动或重新加载时解析 1Password 引用时,请使用该插件。
使用 1Password for Claude 进行浏览器登录¶
1Password for Claude 允许 Claude 请求登录,同时 1Password 浏览器扩展通过加密通道将凭据直接填入页面。机密永远不会进入模型上下文、对话记录或 OpenClaw。当 OpenClaw 在启用 Claude Code 的 Chrome 集成的情况下运行 claude-cli 后端 时,代理任务可以对需要真实已登录会话的网站使用该流程。
除了后端本身之外,还需要以下条件:
- 一台 macOS 网关主机,装有 Chrome、已连接的 Claude in Chrome 扩展、1Password 桌面应用和 1Password 浏览器扩展(两者均为 8.12.28 或更高版本)。
- Claude Code 已登录直接的 Anthropic 套餐(Pro、Max、Team 或 Enterprise)。Chrome 集成不适用于 Amazon Bedrock、Google Cloud 或其他第三方提供商。
- Anthropic 侧的一次性 1Password 连接:1Password for Claude 通过 1Password 指南 中描述的 Claude 桌面应用或扩展流程进行设置,目前是 macOS 测试版。在 1Password Business 中,管理员必须先在 Policies 下启用 "Allow AI agents to autofill for users";Anthropic Team/Enterprise 套餐同样默认禁用该集成,直到所有者将其启用。
- 一个向 Claude 启动参数添加
--chrome的 CLI 后端插件;捆绑的后端不会启用 Chrome。 - 网关主机处需要有一名操作人员:每次使用凭据时,都会在主机上显示 1Password 提示并需要确认(例如通过 Touch ID)。在严格的 exec 策略下,浏览器工具调用本身也会先作为 OpenClaw 审批转发到你的频道。
在将这一流程接入 OpenClaw 之前,先在网关主机上的交互式会话中验证各个组件:运行 claude --chrome,确认扩展能够连接,并检查 claude-in-chrome 工具是否包含凭据工具。如果这些工具没有出现在那里,它们也不会通过 OpenClaw 出现。
一次性验证码由 1Password 在同一页面上填写;切勿通过聊天传递验证码或密码。无头或远程网关目前无法使用此流程,因为审批和浏览器都位于网关主机上。
安全说明¶
- 通过 exec providers 解析的机密值会保留在 Gateway 内存中;配置快照和
config.get响应会对 SecretRef 字段进行脱敏处理。 - 插件解析器和 broker 强制设置
OP_LOAD_DESKTOP_APP_SETTINGS=false和OP_BIOMETRIC_UNLOCK_ENABLED=false,以便无人值守读取不会触发桌面审批或 macOS 权限对话框。 - 在传递服务账户令牌之前,插件会解析
op可执行文件,并拒绝任何可由其他本地账户写入或具有无法验证的 Windows ACL 或所有权的路径。绝对的CLAW_1PASSWORD_OP覆盖值也需接受同样的检查。 - 解析器请求限制为 32 个引用。读取操作每次并行执行四个,每个读取有七秒超时;提供者级别的 90 秒超时涵盖了完整支持的批次以及进程和权限检查的开销。
- 切勿将机密值放入
openclaw.json、日志或聊天中。将服务账户的范围限定为 OpenClaw 所需的保险库和条目。
故障排除¶
op缺失:在 Gateway 主机上安装 CLI,确保它位于PATH中,或者将CLAW_1PASSWORD_OP设置为其绝对路径。op不受信任:使用由当前用户或 root 拥有的可执行文件,并移除该可执行文件及其父链上的组/其他写入权限。- 身份验证失败:使用
openclaw onepassword status检查插件令牌文件、其内容以及服务账户的保险库权限。 - 引用被拒绝:显式包含保险库,并在名称较长或包含不支持的 1Password 引用字符时使用稳定的保险库、条目、分区和字段 ID。
Homebrew 命令符号链接¶
如果手动 exec provider 对 /opt/homebrew/bin/op 或 /usr/local/bin/op 报告 command must not be a symlink,请使用插件设置流程。手动 exec providers 要求命令不是符号链接。将 Homebrew 链接解析到带版本的 Caskroom 路径仅在相应版本仍处于安装状态时有效;后续的软件包升级或清理可能会将其移除。
插件在每次解析器请求时从 Gateway 进程的 PATH 中解析 op,然后在传递服务账户令牌之前检查真实可执行文件及其父目录。现有的 CLAW_1PASSWORD_OP 覆盖值可以指向稳定的绝对 Homebrew 链接,并接受相同的检查。插件在升级后会跟踪替换链接,而不会将其版本化目标存储在 openclaw.json 中。组可写或他人可写的可执行文件仍然会失败,允许其他用户替换被检查路径的父目录也会失败。
在迁移之前,将每个现有凭据目标映射到其旧命令读取的确切 1Password 引用。手动 provider 可能将该引用放在 args 中,并使用无关的 SecretRef id;将该 id 复制到插件中会选择不同的机密或直接失败。如果 onepassword 已经命名了一个手动 provider,请使用 --provider-alias <alias> 选择一个未使用的 provider 别名:替换该 provider 还会更改使用该别名的未列出的引用。按照上述步骤创建插件令牌文件,然后生成包含显式映射的计划,例如:
openclaw onepassword secretref setup \
--target 'models.providers.anthropic.apiKey=op://Automation/Anthropic/credential' \
--target 'models.providers.openai.apiKey=op://Automation/OpenAI/credential' \
--plan-out ./openclaw-1password-secrets-plan.json
在使用上述 status、dry-run、apply、audit 和 reload 命令之前,检查计划中的 provider 别名和每个目标。只有在所有对该手动 provider 的引用都已迁移之后,才移除旧的手动 provider;请将该检查包括在内,涵盖 auth-profile 和渠道凭据。
本页原文 Markdown:在 AtomGit 查看·内容源自开源项目 cl/openclaw