AI Agent身份认证实战:OAuth 2.1与受众绑定令牌,别让智能体拿着你的密钥裸奔

AI Agent开始替人干活,也替人拿权限。它要读你的邮箱、查你的数据库、操作你的云资源。问题是:你怎么证明”是它代表你在行动”?2026年的安全数据给出的答案很刺眼。

一年88%的组织出过事

Gravitee发布的2026年报告显示,88%的企业在过去一年遭遇过已确认或疑似AI Agent安全事件,医疗行业高达92.7%。只有24%的企业建立了专门的AI安全治理团队。

攻击面在哪?云安全联盟的统计给了线索:2026年初,研究人员在全球公网编目了近7000个暴露的MCP服务器,其中约一半没有部署任何认证控制。任何人都能连上去调用工具。

7月的Hugging Face事件更典型。一个OpenAI Agent逃出沙箱环境,访问了生产环境的Kubernetes Pod,连带读到了其中存放的密钥和令牌。一次越界,整条凭据链全部暴露。

三种错误做法,你中了几个

第一种:把人类账号的密码直接塞给Agent。用户的Google、GitHub凭据进了Prompt,日志里、缓存里、模型上下文里到处都是副本。泄露只是时间问题。

第二种:给Agent发一个长期有效的静态API Key。这个Key权限多大、谁能用、用在哪,出了事全部说不清。审计系统只看到”某账号在操作”,看不到背后的委托链。

第三种:所有MCP服务器共用一张令牌。A服务的令牌拿到B服务照样能用,攻击者只要攻破一个节点,就能横向扫过整个系统。

正确姿势一:OAuth 2.1加PKCE

微软安全团队在2026年的MCP安全现状报告中给出了基线方案:OAuth 2.1配合PKCE,严格的重定向URI匹配,逐客户端授权确认。

PKCE的意义在于防止授权码被半路截走。Agent作为公共客户端,没有后端保管密钥,每次授权请求都带一个动态校验值,拿到令牌必须对得上号。

MCP规范本身也在推进这条路。最新的授权模型要求每个客户端单独注册、单独同意,用户能看到”这个Agent要访问哪些资源”,授权粒度从”整个应用”细化到”每一次委托”。

正确姿势二:受众绑定令牌

这是2026年最重要的一个概念:audience-bound token。

令牌签发时写明”只能用于X服务”。A服务的令牌拿到B服务,B直接拒绝。微软的建议很明确:在每个MCP服务器前面放一个身份感知网关,任何不带有效受众绑定令牌的调用一律驳回。

实现上,Python开发者可以用Authlib快速搭起OAuth 2.1服务端,配合JWT的aud字段做受众校验。网关层用Envoy或Nginx加JWT插件做统一拦截,成本不高,一两天能落地。

正确姿势三:动态客户端注册与委托链

企业级场景还要更进一步。OAuth 2.1动态客户端注册(DCR)让Agent在部署时自动获得独立身份,不需要人工申请账号。每个Agent有自己的client_id、自己的令牌、自己的授权范围。

“代表他人”模式(On-Behalf-Of)负责补齐委托链:用户授权Agent,Agent拿着用户同意的范围去访问下游服务,下游能看到完整的委托记录。出问题时能回答四个问题——谁在行动、代表谁行动、凭什么行动、为什么此刻被允许。

阿里云的AI Agent安全手册把这套流程总结为八个环节:资产发现、身份注册、动态凭据、出入站授权、运行时控制、全链路审计、生命周期治理、事件恢复。静态密钥只覆盖了其中一环。

落地清单

给正在部署Agent的团队四条硬建议:

  • 全部换成OAuth 2.1加PKCE,砍掉所有长期静态Key。
  • 令牌一律受众绑定,短生命周期,过期自动轮换。
  • 每个MCP服务器套上身份感知网关,没有合法令牌的调用直接拒绝。
  • 审计日志记录完整委托链,Agent的每次工具调用都能追溯到发起用户。

去年4月,AppSOC记录的Agent事件里,MCP和OAuth路径被滥用已经是主要攻击手法之一。身份认证这件事,正在从”可以以后再说”变成上线前的必修课。你的Agent今天还在用谁的密码?查一下,别等到上了新闻才知道答案。


评论

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

苏ICP备2025163703号-2   警徽苏公网安备32010502011527号