微信扫码
添加专属顾问
让智能体安全调用企业系统,这套鉴权方案解决了无浏览器交互、多用户隔离等核心痛点。 核心内容: 1. Agent 鉴权面临的核心挑战与安全痛点 2. 基于 sso-cli 与 keychain 的无感登录与安全存储方案 3. 多用户隔离、临时环境变量等关键设计实现与策略
在智能体(Agent)通过 Skill 调用企业内部业务系统时,最大的阻碍往往不是接口能力,而是"鉴权"。
本文介绍一套面向 Agent 场景的 CLI/SSO 鉴权方案,围绕 sso-cli、业务 CLI 以及一个私有的 sso-sdk 包,构建起一套 token 不落盘、不对外暴露、多用户隔离、登录过程无感的安全鉴权体系。
文章会从安全痛点出发,逐层拆解 keychain 主密钥、密文文件、飞书 Hook 登录、Agent 轮询授权、临时环境变量等关键设计,并讨论各环节面临的卡点与解决策略。
2026年3月底,飞书开源了飞书CLI,一个多月时间狂揽 1w+ star,将 Agent CLI 这个概念带到了面前。
跟传统 CLI 面向人类不同,Agent CLI 是专门给 AI 使用的命令行工具:它输出结构化数据,拥有明确统一的退出码和错误语义,让大模型能像调用函数一样可靠地把它当成工具。飞书 CLI 把文档、审批、日历等业务能力封装成一个个可组合的命令,第一次系统性地展示了企业系统如何以「Agent 友好」的方式开放。在这个背景之下,企业内部也开始思考,并尝试将业务系统能力封装,通过 Agent CLI 的方式提供给到一众 Agent 框架。
然而,当真正动手把这些业务 CLI 接入 Openclaw、Claude Code 等 Agent 框架时,一个绕不开的障碍立刻出现了:鉴权。在这些框架下,用户通过自然语言驱动 Skill 调用企业内部的业务 CLI,而这些 CLI 最终依赖公司统一的 SSO 单点登录来访问 HTTP API。
在以往的 Web 时代,SSO 鉴权流程天然依赖"人在浏览器前":业务系统跳转至 SSO 平台,用户手动完成认证授权,后续请求携带 Token 进行鉴权。但 Agent 无法完成这一交互式登录,导致大量业务能力无法对智能体开放。
Before(接入前):
Now(接入后):
Agent CLI接入后,SSO鉴权面临三层递进式挑战:
早期实践中常采用"预先人工登录":开发者手动完成 SSO 登录,将长期 Token 写入环境变量、配置文件甚至硬编码,供 Agent 直接读取。
想象一种情况:一个团队共享的智能体沙箱中,产品同事 A 刚完成登录,沙箱中存入了 A 的 Token。紧接着研发同事 B 在同一沙箱发起调用——如果没有用户隔离,B 的请求将沿用 A 的身份。审计日志显示为 A 的操作,而 B 可能越权访问了本无权限的数据。
这些痛点指向同一个结论:必须为 Agent 设计一套原生的、脱离浏览器依赖的、多人隔离且防泄露的 SSO 鉴权体系——既要解决"Agent 如何登录",也要回答"Token 放在哪里才安全"以及"如何确保每一次调用都对应到真实的用户"。
针对这些痛点,我们设计了一套纵深防御的鉴权体系,核心原则只有几条,但它们贯穿了整个实现:
下面我们分层阐述这套体系的具体架构。
整个鉴权体系由四个关键部分构成:
abtest-cli、trade-cli),它们是 Agent 实际调用的工具。这些 CLI 不直接处理 Token,而是依赖一个内部包来获取。整体架构图:
运行时,一次典型的调用流为:
sso-sdk 包获取当前用户的 SSO Token。sso-cli 启动登录流程,向 SSO 平台申请一次性 code,通过飞书卡片让用户授权,随后按间隔时间轮询 SSO 平台换取 Token。sso-cli 加密写入本地。这套流程里最精妙的部分在于 sso-cli 的存储和交互设计,我们逐步拆解。
sso-cli 的职责是:在极不安全假设(沙箱环境可能被任何人读取)下,安全地存储用户的 SSO Token,并支持多用户隔离。它的设计思想是"本地不留存可用明文,即使拿到密文和源码也难以解密"。
sso-cli 首次运行时需要生成一个高熵的主密钥(Master Key),该密钥可以由密钥框架生成,常见的方式可以存储到各个操作系统的原生密钥链中:
这样做的好处是,主密钥不落在任何普通文件中,其读取受操作系统用户权限保护。sso-cli 仅在需要加解密时从 keychain 取出主密钥,用完即从内存中擦除。
在 Agent 的沙箱环境中,我们假定攻击者虽然能读到文件系统,但通常无法直接访问运行中进程的系统密钥链(除非已经提权)。这就提供了第一道强有力的防护。
当用户通过 SSO 登录拿到 Token 后,sso-cli 不会直接存明文。它会将 user -> token 的映射结构序列化,加密后存入本地文件。
没有主密钥,即使拿到密文文件也无法解密;而主密钥被锁在 keychain 中。这样即使沙箱文件被全量窃取,攻击者也无法离线还原用户的 Token。
文件内通过 key 粒度隔离多用户,而非每个用户一个文件。这样做简化了并发控制,也减少了密文数量。
在与 Agent 对话时,每一轮对话对应一个"当前用户"。我们通过一组加密的临时环境变量来标识这个用户,而不是明文的用户名。
具体做法是:由 Agent 框架在启动子进程时,注入一组环境变量,对用户标识进行对称加密后得到 salt。只有持有相同派生密钥的组件(即 sso-sdk 包)才能解密还原出真实的用户标识。
这组环境变量仅在对话生命周期内有效,对话结束后立即销毁,并且:
/proc 的全局视图中(因为是进程私有的环境块)。当多个用户在同一个沙箱中并发操作时,加密文件的读写通过文件锁保护。
这种设计既解决了"多人共用同一凭证"的问题,又保证了并发安全性,且大大增加了攻击者通过环境变量窃取用户身份的难度。
在实现了基础功能后,初版的 sso-cli 登录流程非常生硬:
sso-cli 开始轮询。这不仅打断用户体验,而且依赖用户的主动告知,常因为忘记触发轮询而超时。
Before(旧版登录流程):
Now(Hook 模式):
我们利用飞书机器人能力做了一个 Hook 模式,让整个流程自动化、无感:
sso-cli 被 Agent 调用执行登录时,它会拦截自身的 JSON 输出,生成一张飞书卡片消息,通过飞书 Bot 发送给当前用户。卡片中包含 SSO 登录链接,并且设置为仅本人可见。sso-cli 在后台以 一定时间间隔 轮询 SSO 平台,用一次性 code 换取 Token。sso-cli 会立即:整个流程中,用户唯一需要做的就是点一下飞书卡片,剩下的轮询、存储、清理全部自动完成。这极大地提升了在 Agent 对话中的鉴权体验。
降级方案:如果飞书卡片信息能力不可用,
sso-cli会降级为发送普通文本消息,将登录链接直接展示给用户。此时消息可能持久化在聊天中,但 Token 本身并不在此出现,只是授权链接,风险可控。
传统 SSO 平台仅支持实时 Web 回调授权,无法适配 Agent 的异步场景。本次方案对 SSO 平台进行了关键迭代,引入了 Agent Poll 授权模式,使其成为一种通用的平台能力。
Agent Poll 授权模式流程:
升级后的授权流程如下:
sso-cli 向 SSO 平台请求生成一个一次性登录链接,平台同时返回一个与该链接绑定的短期 code。sso-cli 在一段时间内,间隔轮询 SSO 平台的 token 接口,使用相同的 code 换取 Token。code 标记为已用;同时 code 自身也有一段绝对过期时间。安全设计要点:
sso-cli 将拒绝并终止流程。这一迭代使得 SSO 平台不仅服务于传统的 Web 应用,也正式具备了支撑 Agent 时代各类自动化场景的能力,成为企业内部鉴权基础设施的重要升级。
业务 CLI 的开发者不需要关心主密钥、加密文件、多用户环境变量这些复杂细节。他们只需要在自己的代码中引入公司私有的 sso-sdk 包,然后调用对外暴露的方法即可。
业务 CLI 集成示意图:
sso-sdk 包托管在内部的 Go Module Proxy 上,仓库权限仅对授权业务模块开放。这样:
这是一种编译期访问控制,相比运行时控制更加绝对和前置。
我们会继续将 sso-cli 单独保持为登录与存储的守护工具,而 sso-sdk 包只封装读取和解密。分离的目的是:
内部执行的步骤是:
整个过程不经过任何网络或 IPC,安全且快速。
虽然 sso-sdk 已经通过私有仓库控制了使用权限,但仍然有被逆向分析的风险——拿到业务 CLI 二进制的人可能会提取出 Token 读取逻辑,进而想办法在特定环境下恢复明文。
我们的对抗思路是:将 Token 的获取和加解密逻辑编译为独立二进制对象,再通过某种方式在运行时加载。
.so/.dylib),由主业务 CLI 动态加载调用。plugin 包,甚至将逻辑以 CGO + 静态库的形式内嵌并剥离符号。这样做可以显著提升逆向成本,普通 strings 和静态分析基本失效。不过,我们也清醒地认识到这会带来调试、更新和排障的额外开销,因此这还在权衡阶段,目前主要以私有包 + 仓库权限保证安全边界。
我们通过一套"sso-cli 安全存储 + 飞书无感登录 + 内部私有包控制 + 多用户加密隔离 + SSO 平台 poll 模式"的组合方案,解决了智能体业务 Skill 调用企业内部 SSO 鉴权接口的难题。这套方案的核心收益是:
这套体系已在内部多个 Agent Skill 中落地运行,有效平衡了安全、易用性和开发效率。
未来展望:从"用户授权"走向"人-智能体-能力"三维管控
当前的鉴权体系核心是 "用户是谁"——Agent 只是用户意图的执行者,所有权限判断最终都落在"人"身上。这种模式在智能体能力尚浅、任务边界清晰时运转良好,但我们预判,随着 Agent 自主决策能力和可调用工具集的膨胀,这套以人为单一主体的授权模型将逐渐显露局限。
一个可预见的演进方向是:将"用户身份""智能体身份""功能权限"三者解耦,构建三维管控体系。
这意味着,未来的 SSO 平台可能需要从一个"身份认证与授权服务"逐步演进为 "智能体访问策略引擎"。它不仅要回答"这个 token 是谁的",还要回答"这个调用链路是谁发起、经由哪个智能体、意图是什么、当前风险等级如何",并基于此做出动态的、上下文感知的鉴权决策。
在这个新范式下,我们今天建立的这套安全信道、加密存储和无感登录机制并不会被废弃,反而会成为更上层建筑的可信底座。届时,token 将不再仅携带用户标识,而是同时编码智能体身份、任务范围和约束条件;而我们今天在环境变量加密、主密钥保护和一次性授权码上的实践,也恰好为那个更复杂但更安全的未来,打下了坚实的地基。
注:本文章包含 AI 生成图片内容。
53AI,企业落地大模型首选服务商
产品:场景落地咨询+大模型应用平台+行业解决方案
承诺:免费POC验证,效果达标后再合作。零风险落地应用大模型,已交付160+中大型企业
2026-07-14
Claude Code 新浏览器实测:前端开发者真的离不开它了
2026-07-14
别再迷信 AI 经验模板:大模型应用真正缺的,是“条件可复现”
2026-07-14
GPT-5.6 Sol、Terra、Luna 怎么选?到底哪个档位适合你?
2026-07-13
GPT-5.6、ChatGPT Work 与 Codex 更新食用指南
2026-07-13
什么是智能体 Harness
2026-07-13
独立开发者做AI,先找交付缝隙
2026-07-13
如何做好AI Code Review工具
2026-07-13
Anthropic三位高管深度对谈Agent终极形态:从聊天进化成看不见的操作系统
2026-04-24
2026-04-17
2026-04-24
2026-05-19
2026-04-22
2026-04-24
2026-04-24
2026-04-16
2026-04-16
2026-04-20
2026-07-14
2026-07-06
2026-07-05
2026-06-30
2026-06-27
2026-06-26
2026-06-25
2026-06-18
欢迎您使用【53AI 官方网站】(以下简称“本网站”或“我们”)。本《会员服务协议》(以下简称“本协议”)是您(以下简称“会员”或“用户”)与【深圳市博思协创网络科技有限公司】之间关于注册、登录及使用本网站会员服务所订立的法律协议。
在您注册或登录前,请务必审慎阅读、充分理解各条款内容,特别是免除或限制责任的条款、知识产权条款、争议解决条款等。此类条款将以加粗形式提示您注意。 当您通过微信公众号授权、手机验证码验证或其他方式成功登录本网站时,即视为您已完全理解并同意接受本协议的全部内容。
一、 定义
本网站:指由【深圳市博思协创网络科技有限公司】运营的,域名为【53ai.com】的网站及相关移动端页面。
会员服务:指本网站向注册会员提供的知识库文章查阅、内容检索及其他相关增值服务。
知识库内容:指本网站发布的包括但不限于文字、图表、数据、研究报告、行业分析等数字化内容资源。
二、 账号注册与登录
登录方式:本网站支持以下登录方式,您可根据实际情况选择:
微信公众号授权登录:您同意将您的微信OpenID信息授权给本网站,用于创建或关联会员账号。
手机验证码登录:您需提供真实有效的手机号码,并通过短信验证码完成身份验证与登录/注册。
账号安全:您的账号仅限您本人使用,禁止赠与、借用、租用、转让或售卖。因您保管不善导致的账号被盗、密码泄露等损失,由您自行承担。
实名认证:根据相关法律法规要求,我们可能要求您在特定功能下完成实名认证。如您拒绝提供,可能无法使用部分或全部服务。
未成年人保护:若您未满18周岁,请在法定监护人的陪同下阅读本协议,并在征得监护人同意后使用本服务。
三、 服务内容与规范
知识库查阅权限:会员登录后,有权按照其会员等级对应的权限范围,在线浏览、检索本网站知识库中的相关文章及内容。
服务变更:我们有权根据业务发展需要,调整、变更或终止部分服务内容,并将以网站公告、公众号消息等方式提前通知。
禁止行为:您在使用服务时不得实施以下行为:
利用技术手段批量爬取、下载、转存知识库内容;
将知识库内容用于商业目的或未经授权地向第三方传播;
干扰本网站正常运行或侵犯其他用户合法权益;
发布违法违规信息或从事违反公序良俗的活动。
四、 知识产权声明
权利归属:本网站知识库中的排版设计、软件代码等内容的知识产权均归【公司全称】或原权利人所有,受《中华人民共和国著作权法》等法律保护。
有限许可:本网站授予会员一项非独占、不可转让、不可转授权的普通许可,仅限于个人学习、研究之目的在线查阅知识库内容。
侵权追责:未经书面许可,任何单位或个人不得以任何形式复制、转载、摘编、镜像、汇编或以其他方式使用上述内容。一经发现,我们保留追究其法律责任的权利。
五、 个人信息保护
我们重视对您个人信息的保护。关于我们如何收集、使用、存储和保护您的个人信息,请单独阅读 《隐私政策》。
您通过微信公众号授权或手机号验证所提供的信息,我们将严格按照《个人信息保护法》的规定处理,仅用于身份识别、服务提供及安全验证等必要用途。
您可以随时通过网站设置或联系客服行使查阅、更正、删除个人信息及撤回授权同意的权利。
六、 免责声明
内容准确性:知识库内容仅供参考,不构成专业建议。我们不对其完整性、准确性、时效性作任何明示或暗示的保证,您应自行判断并承担使用风险。
不可抗力:因自然灾害、政策法规变化、网络故障、第三方平台接口异常(如微信接口维护、运营商短信通道故障)等不可抗力导致的服务中断或延迟,我们不承担违约责任。
第三方链接:本网站可能包含指向第三方网站的链接,该等网站的内容和服务不受我们控制,请您自行甄别风险。
七、 违约责任
如您违反本协议约定,我们有权视情节采取警告、限制功能、暂停服务、注销账号等措施,并保留要求赔偿损失的权利。
如因您的违约行为导致我们遭受行政处罚、第三方索赔或商誉损失,您应承担全部赔偿责任(包括但不限于罚款、赔偿金、律师费、公证费等)。
八、 法律适用与争议解决
本协议的订立、执行和解释均适用中华人民共和国大陆地区法律。
因本协议产生的或与本协议有关的任何争议,双方应友好协商解决;协商不成的,任何一方均可向【公司所在地】有管辖权的人民法院提起诉讼。
九、 其他
本协议构成双方就本服务达成的完整协议,取代此前任何口头或书面约定。
本协议任一条款被认定为无效或不可执行的,不影响其他条款的效力。
我们对本协议享有最终解释权,并在法律允许的范围内保留随时修改的权利。修改后的协议一经公布即生效,继续使用服务即视为同意修订内容。