如何在nono里安全完成OAuth登录:幻影令牌让真实密钥远离AI Agent
如何在nono里安全完成OAuth登录幻影令牌让真实密钥远离AI Agent【免费下载链接】nonosecure multiplexed execution paths for agents - zero trust, zero setup, zero latency.项目地址: https://gitcode.com/gh_mirrors/non/nononono是一个面向 AI Agent 的零配置沙箱执行框架主打「零信任、零搭建、零延迟」。它最巧妙的能力之一是让你在沙箱里放心地跑 OAuth 登录流程真实令牌在进入 Agent 之前就被替换成幻影令牌Phantom TokenAgent 拿到的只是形似凭证的「空壳」而真实密钥始终保存在沙箱之外的 nono 令牌存储中。本文用最少代码带你理解原理并完成配置。为什么沙箱里的 OAuth 登录是安全难题很多编码 Agent如 Claude Code、Codex不使用静态 API Key而是执行交互式 OAuth 登录把 access_token / refresh_token 存到本地。这造成了三难困境✅ Agent 必须能跑通/login、device-code 等登录流程 真实 OAuth 令牌响应不能被沙箱内进程读到 后续 API 调用还要能正常鉴权nono 的解法是一句话登录照常在沙箱里发生但令牌响应在送达 Agent 之前被重写为幻影值。如上图所示所有网络流量都经过沙箱外的 nono 代理代理验证会话令牌、对照域名白名单、检查解析 IP然后才连接上游。OAuth 捕获正是挂在这条链路上的钩子。幻影令牌长什么样Agent 看到的「凭证」其实是这样的access_token nono_64位十六进制 refresh_token nono_64位十六进制 id_token eyJ...合成的 JWT 形态幻影...三个关键特性不可直接兑换—— 拿着nono_64hex去敲提供商的门没有任何用它只能通过 nono 代理的已准入路由解析回真实令牌JWT 形态也是幻影—— 某些客户端会先检查id_token的 JWT 结构三段式 base64url。nono 会生成一个结构合法、alg: none、有效期极远的合成 JWT骗过本地结构检查见 jwt_shaped_phantom.rs真实材料安全存储—— 真实令牌存在沙箱外的 nono 状态目录权限仅属主可读保留 90 天上限 4096 条幻影见 oauth_capture/mod.rs三步完成配置最快上手指南第 1 步声明 OAuth 捕获 Provider在 profile 中告诉 nono令牌从哪个端点来、哪些字段是真令牌、幻影能用在哪些 API 域名。完整示例参考官方文档 sandboxed-oauth-logins.mdx核心片段如下credential_providers: { my_agent: { type: oauth_capture, token_endpoints: [ { host: https://auth.example.com, path: /oauth/token, response_fields: [ { path: access_token, kind: opaque }, { path: refresh_token, kind: opaque } ], request_body: auto, request_nonce_fields: [refresh_token] } ], api_hosts: [https://api.example.com] } }要点kind用opaque表示普通 bearer 令牌只有当客户端会本地解析id_token时才用jwt客户端刷新令牌时会把幻影发回来request_nonce_fields声明哪些请求字段需要解析还原device-code 流程通常有两个端点轮询 交换要都配上第 2 步绑定代理路由credential_routes: [ { name: my_agent_api, provider: my_agent } ]只有绑定到这条路由的流量才能解析幻影——这是幻影不被滥用的最后一道闸门。第 3 步跑一次登录并验证证据RUST_LOGnono_proxy::oauth_capturedebug nono run \ --profile my-agent-oauth --allow-cwd -- my-agent login日志里看到这三行就说明重写成功configured OAuth capture endpoint providermy_agent matched OAuth capture endpoint providermy_agent rewrote OAuth token response fields to phantoms providermy_agent之后检查本地 auth 文件时只看形状、别打印值——token 字段应为nono_开头的字符串即安全。常见问题与边界说明Q忘了配端点路径真实令牌会漏出去吗不会。nono 会对已配置捕获主机的所有响应做兜底检查只要响应里出现access_token等常见令牌字段但没匹配到已声明端点就 fail-closed 直接阻断而不是放行真实令牌。Q客户端刷 TLS 证书校验失败OAuth 捕获对令牌主机使用 TLS 拦截。若客户端有自己的 CA 环境变量如CODEX_CA_CERTIFICATE在 profile 的network.tls_intercept.ca_env_vars中补充即可不会引入新的全局信任根。Q能限制登录后的 Agent 只能调哪些接口吗可以。在credential_routes上加endpoint_policy例如只放行POST /v1/messages默认拒绝其余请求。相关模块路径内容路径功能文档含 Codex / Claude Code 完整 profiledocs/cli/features/sandboxed-oauth-logins.mdx手工验收清单docs/cli/development/oauth-capture-manual-qa.mdxOAuth 捕获与幻影存储实现crates/nono-proxy/src/oauth_capture/JWT 形态幻影生成crates/nono-proxy/src/jwt_phantom.rsTLS 拦截令牌主机crates/nono-proxy/src/tls_intercept/凭据注入静态 Key 场景的更简方案docs/cli/features/credential-injection.mdx总结nono 的「沙箱内 OAuth 登录」 端点捕获 响应重写 路由级幻影解析 fail-closed 兜底。Agent 从此拿不到任何可转手的真实 bearer 令牌——它只能继续通过 nono 受控通道工作这正是零信任沙箱该有的样子。【免费下载链接】nonosecure multiplexed execution paths for agents - zero trust, zero setup, zero latency.项目地址: https://gitcode.com/gh_mirrors/non/nono创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考