ARTICLE · INTELLIGENCE

战地情报 · 详情页

来自尧图项目组的一线实战观察与深度解析

AI助理代登录如何管权限?Poppy草案六道边界解析

AI助理代登录如何管权限?Poppy草案六道边界解析

最近AI圈子里讨论最热的一件事,就是个人AI助理开始真正“伸手”碰用户账号了。不是聊聊天、推荐一首歌那么简单,而是替你读取邮件、安排日程、修改文档、下单支付——它要代你登录。这个变化听起来很爽,但做身份安全和系统架构的人看到的完全是另一番场景:账号密码、令牌、会话、权限,每一个环节都可能变成风险口。所以当“Poppy草案”这个名字开始在圈子里流传的时候,我第一时间就找来读,它干的正是这件事:给AI助理代登录立规矩,把权限管起来。

这份草案不是某一家公司的产品,更像是一份行业共识的雏形,背后是一群做身份认证、做安全协议、做智能体框架的人在反复拉扯之后形成的框架。它的核心不是禁止AI碰账号,而是给AI碰账号设置边界。一句话概括:AI可以替你做事情,但每一步都要有明确的授权、范围、期限和记录。今天这篇就围绕Poppy草案来写,我会把草案在管的那几道权限完整拆开,也会从落地角度聊聊实际开发者和普通用户分别该怎么做。

1. 为什么AI助理一定要面对“代登录”这道坎

1.1 助理的使命决定了它必须碰权限

个人AI助理这个概念,早期其实很“怂”。大家习惯的形态是一个对话框,你问它一个问题,它给你一段答案。这种模式不碰账号,也不碰权限,本质上就是一个更聪明的搜索引擎。

但真正的助理不是这样的。一个助理要帮你订机票,就必须能进入你的出行App;要帮你整理报销,就必须能读你的邮件;要帮你回复客户消息,就必须能操作你的沟通工具。哪怕是最简单的“帮我看看明天的会议安排”,背后也需要AI去读取日历数据。也就是说,AI助理的天职就是替用户操作,而操作的前提就是登录。

这一步迈出去之后,问题立刻变得复杂。传统的登录是“用户本人登录”,登录之后系统默认所有操作都是用户做的。可AI助理一旦介入,系统面对的是一个间接使用身份的“第三方”,这个第三方还是程序,不是人。程序会做什么、做到什么程度、会不会出错、会不会被恶意利用,全部变成了未知数。所以行业里逐渐形成了一个共识:AI助理要代登录可以,但绝对不能用传统的“全权登录”方式,必须给它一套独立的授权体系。

我在跟做身份认证的朋友聊的时候,他有一句话说得特别直白:“AI助理本质上是一个拿着你钥匙进你家门的管家。你不会把全部钥匙都给它,你只会给它需要用到的柜子钥匙,而且你会希望随时能把钥匙收回来。”Poppy草案管的就是这套“钥匙分级机制”。

1.2 传统登录体系在AI场景下的三个断裂点

为什么不能直接把现有的账号密码体系给AI用?很多人直觉是“安全风险”,但更准确的说法是:传统体系在AI场景下有结构性断裂。

第一个断裂点叫“身份与意图混淆”。传统登录里,登录成功就意味着身份验证通过,之后的操作被视为用户的意图。但AI助理登录之后,操作是AI自己决策的,用户根本没有逐条确认过。如果把“AI发起操作”等同于“用户意图”,那么AI一次错误的调用就可能造成本不该发生的后果,比如误删文件、多发邮件。传统体系缺乏“意图证明”这一个环节。

第二个断裂点叫“权限边界模糊”。传统账号的权限通常是全有或全无,要么登录成功拥有全部权限,要么拒绝访问。但AI助理需要的往往是“只读邮箱”“仅可编辑草稿”“能查看日程但不能修改”这种细粒度权限。传统的OAuth虽然也有范围(scope)的概念,但粒度通常比较粗,而且很多平台的历史接口根本没法表达“允许处理但禁止删除”这样的细颗粒约束。

第三个断裂点叫“没有人与程序之间的动态博弈”。人是会变化的,用户可能今天同意AI读取邮件,明天就不愿意了。传统登录里的授权往往是一次授权长期生效,没有自动过期、没有动态撤销、没有使用频率限制。AI助理是持续运行的,它可能在用户睡觉的时候还在执行任务,传统体系完全无法应对这种“持续代理”模式下的风险控制。

Poppy草案正是从这三个断裂点入手,重新设计了一套权限划分逻辑。所以理解Poppy,本质上不是去背条款,而是去理解它怎么解决这三个问题。

2. Poppy草案到底在管什么

2.1 草案的定位:它不是协议,也不是SDK

首先要明确一个容易混淆的点:Poppy草案不是一个新的通信协议,也不是一个可以直接调用的软件开发工具包。恰恰相反,它描述的是“权限边界共识”。

这个共识是什么?当用户授权一个AI代理去登录和操作其他服务时,系统应该按什么方式划分权限、按什么流程授予权限、按什么机制回收权限。它不规定你用哪种加密算法,也不规定令牌长什么样,更不规定用哪家云服务。具体的实现方式交给各平台去折腾,但权限划分的框架是统一的。

我举个例子类比一下。快递柜出现的时候,大家都不知道怎么安全地让快递员投递包裹。后来行业慢慢形成了一套共识:快递员只能打开当前这个格口,不能打开其他柜子,员凭码打开后格口自动锁定,取件后拍照留痕。Poppy做的事情就类似:它定义一个“AI代理权限格口”的通用模型。AI每次要访问资源,都像一个快递员面对一个柜子,系统给它一把只能开某一格、只能用一段时间、每次开启都留记录的钥匙。

这个定位让Poppy既能被大平台采用,也能被小团队接入。它不需要你把整个业务系统推翻重来,只需要你在授权边界上对齐它的框架。

2.2 核心原则:最小权限、动态授权、全程可溯

Poppy草案虽然内容很多,但核心原则只有三条,掌握了这三条,后面的细节都能推导出来。

第一条是最小权限原则。AI助理获得的权限,必须严格限制在完成当前任务所需的最低范围内。如果任务是查看明天的日程,那就只给“日历读取”权限,绝对不给“日历修改”权限;如果任务是代发一封邮件,那就只给“发送邮件”权限,绝对不给“读取所有历史邮件”权限。

第二条是动态授权原则。权限不是一次授权终身有效的,而是带有时效、带着动态约束的。比如一次任务授权、一分钟会话授权、一周长效授权,每种授权都有明确的过期时间;而且授权过程是动态的,AI每走一步都可能发现权限不够,需要向用户实时申请扩展。

第三条是全程可溯原则。每一次AI发起登录、访问资源、执行操作,都要产生一条可审计的日志。日志记录AI身份、用户身份、被访问的资源、操作结果、时间戳。没有审计的授权就是裸奔,这一点在草案里是强制性的,也是整个行业最一致认同的部分。

这三条原则听起来很朴素,但落地的时候每一条都极其困难。最大的难点是怎么在“最小权限”和“任务完成效率”之间取得平衡。如果权限卡得太死,AI每做一步都要向用户请求授权,体验会非常差;如果放得太宽,又失去了限制的意义。Poppy草案的解决思路是把权限申请做成“批量声明”,AI在开始任务时一次性声明自己需要的全部权限范围,系统自动检查这个范围是否与任务目标匹配。

3. Poppy草案盯上的六道权限

3.1 第一道权限:身份确认,AI怎么证明“我是我”

AI助理代登录的第一个问题,就是身份证明。AI不是人,它没法像用户一样输入密码、收验证码、刷人脸。那么在服务端看来,AI凭什么可以访问用户的数据?

Poppy的思路是“身份派生”。用户首先用自己的身份完成认证,这一步跟传统登录完全一致。认证通过之后,系统并不会把主令牌直接交给AI,而是派生出一个受限的代理身份,这个代理身份绑定到特定的AI实例上,同时绑定本次授权的具体范围。

这个机制的关键在于代理身份与用户主身份是隔离的。AI拿着代理身份去访问服务,哪怕代理身份被泄露,泄露的也只是受限权限,拆不掉用户的完整账号。而且代理身份本身要绑定“AI实例指纹”,比如AI服务的标识、会话编号、运行环境信息。同一个用户的不同AI助理,拿到的是不同的代理身份,彼此之间不能互相顶替。

这里我在实际看草案的时候注意到一个细节:Poppy要求AI每次发起操作时,代理身份要和“意图声明”一起发送。也就是说,服务端不仅知道“谁在访问”,还知道“这次访问是为了干什么”。这个设计非常有价值,它让服务端能做行为检查,比如一个声称“查看日程”的请求,操作目标却指向了通讯录,就可以直接判定为越权并阻断。

3.2 第二道权限:操作范围,能做什么必须写清楚

身份确认解决的是“你是谁”,操作范围解决的是“你能做什么”。Poppy草案里,操作范围被拆成“资源+操作+条件”的三元组。

资源就是你要访问的东西,比如日历、邮件、云盘、通讯录;操作就是你对资源做的事情,比如读、写、删除、发送、共享;条件则是附加的约束,比如“只允许操作三天内的日程”“只允许发送给通讯录里的联系人”“不允许转发”。

这套三元组的表达能力很强。我整理一个示例,方便理解:

{ "agent": "assistant-id-abc", "purpose": "帮忙整理本周日程", "scopes": [ { "resource": "calendar", "operation": "read", "constraint": "date_range: this_week" }, { "resource": "calendar", "operation": "write", "constraint": "max_events: 5" } ] }

上面这个声明表示:AI助理只被允许读取本周的日历数据,并且最多新增5个日程。如果AI尝试读取下个月的日程,或者删除一个已有事件,服务端就可以直接拒绝。

为什么这个设计重要?因为传统OAuth的scope往往只有“calendar.read”“calendar.write”这种粗粒度定义,而AI需要的是“calendar.read.this_week”“calendar.write.max_5”。Poppy草案把粒度下沉到了具体资源和具体约束条件,这让AI在自动执行任务时,出错的范围被大大压缩。

3.3 第三道权限:敏感操作,支付删除类必须二次确认

操作范围权限管住的是日常操作,但有一类操作必须单独拿出来管,就是敏感操作。什么是敏感操作?支付交易、删除数据、修改安全设置、对外发布内容、权限变更,这些操作一旦执行就很难挽回,或者影响范围很大。

对这些操作,Poppy草案的要求是“强制二次确认”,而且这个确认必须是实时的、明确的、由用户本人完成的。AI不能基于之前的授权自动执行敏感操作,每一次都要单独向用户发起确认请求,用户确认之后才放行。

我见过有人质疑说:这样是不是太麻烦了,AI都授权过了,为什么支付还要再确认一次?答案是:风险等级不同。日常读操作错了可以改回来,支付操作一旦错了,钱就出去了。而且敏感操作往往是攻击者最想利用的,如果AI令牌被盗,攻击者唯一能做的就是发起支付和删除操作,二次确认机制能直接切断这条攻击路径。

具体落地上,Poppy建议设置一个“敏感操作专用确认通道”,这个通道可以是用户手机上的一条通知,也可以是一次独立的强认证(比如生物识别)。需要注意的是,二次确认不能和普通授权混在一起,必须做到每次敏感操作都独立触发,哪怕AI在一条任务里连续支付十笔,也要让用户确认十次。

3.4 第四道权限:数据访问与留存,AI读了什么、存多久

这是一道经常被忽略但极其关键的权限。很多人在授权AI处理邮件时,以为只是“让它看一眼”,但背后AI服务可能把邮件内容缓存到自己的服务器上,用于模型上下文,甚至用于训练优化。

Poppy草案把数据访问权限和数据留存权限分开了。数据访问权限指的是AI能读取哪些数据,数据留存权限指的是AI在读取之后能保留这些数据多久、用在哪里、能不能用于模型优化。这两者必须分开授权。

举个例子:用户允许AI读取最新十封邮件来提炼待办事项,这是数据访问权限。但AI在读取之后,这十封邮件的内容能不能被存到AI服务商的日志里三天?能不能进入模型上下文窗口用于后续对话?能不能被用来做用户画像?这些都需要单独的一道授权。

我把数据留存分成三个等级来理解:

等级含义典型场景
会话级数据只在当前AI对话上下文中使用,对话结束即清理日常问答、临时查询
任务级数据保留到当前任务完成,任务结项后删除整理文档、安排行程
持续级数据被持续保留,用于个性化服务或模型优化习惯学习、长期偏好记忆

Poppy草案的倾向很明确:默认按会话级执行,任务级需要明确授权,持续级必须单独向用户说明用途并获得同意。而且无论哪个等级,用户都有权随时要求删除AI已经留存的个人数据。这个条款对普通用户保护意义很大,因为很多AI服务的风险恰恰出在“用户明明只做了一次问答,服务却记住了所有内容”。

3.5 第五道权限:会话连续性,免登录不等于免授权

AI助理代登录之后,是不是登录一次就永远有效?Poppy草案在这个问题上的态度非常坚定:不行,所有代登录都必须有“会话租约”。

什么叫会话租约?就是AI获得的代理访问权,不是永久有效的,而是有一个到期时间。到期之后,AI需要重新向用户申请续期。租约时长可以根据授权类型变化,比如一次性任务授权可能是10分钟,日常助理授权可能是7天,高频助手可能是30天,但绝不存在“永久授权”。

这里还涉及一个很实际的问题:AI在任务执行过程中,租约到期了怎么办?Poppy的答案是:AI必须保存任务检查点,在租约到期前主动向用户申请续期,续期通过后从检查点继续执行,而不是让任务直接失败。

这个设计我用生活化类比解释一下。租约就像你给管家的一张通行证,上面写着“有效期到本周日”。本周日到了,管家必须回来找你续签,哪怕他手头还有一堆事情。好处是你始终掌握主动权,而且你能通过续签的频率,感知到AI到底在忙什么——如果它频繁要求续签,你就能发现问题。

我在测试模拟环境的时候发现,会话租约机制给用户带来的安全感提升非常明显。用户对AI的信任感,很大程度上不是来自“它很聪明”,而是来自“我随时可以让它停下来”。租约就是这个“停下来”的抓手。

3.6 第六道权限:撤销与审计,随时能喊停、事后能查账

最后一道权限是兜底权限。前面五道权限解决了“AI能做什么”的边界问题,但如果没有这道兜底,边界迟早会被突破。

撤销权限指的是:用户必须能够随时、一键、即刻地撤销AI助理的全部或部分权限,撤销动作发生后,AI正在执行的任务要立即中断,不能拖延。这一点看起来基础,但实际实现难度不小,因为AI可能在多个服务上同时操作,撤销信号要广播到所有已接入的服务,还要处理“正在付款但已授权”这种灰色场景。

Poppy草案给出的方案是“撤销优先”。撤销指令具有最高优先级,哪怕某个操作已经执行到一半且没有回滚机制,也要先在系统层面切断后续流程。事后记录里会标明该操作是“撤销前部分执行”,作为审计追溯的依据。

审计权限则要求所有AI代登录行为都留下完整日志。日志至少要包含六个字段:谁操作的(代理身份)、代表谁(用户身份)、访问了什么(资源)、做了什么(操作)、什么时候(时间戳)、结果是什么(成功或失败)。这些日志必须对用户可见,用户可以在授权管理页里看到AI完整的行为轨迹。

审计机制在后续纠纷定责上非常重要。如果用户发现邮箱里多了一封被删掉的邮件,没有审计日志你根本无法判断是AI干的、是用户自己干的、还是账号被黑的。有了完整日志,至少能先定位到操作主体,再进一步排查原因。

4. 实操视角:这几道权限怎么落地

4.1 授权流程怎么设计才不惹人烦

Poppy草案的框架听上去很完善,但如果授权流程设计得让人烦,用户的耐心会被消耗殆尽。我见过很多安全方案,逻辑上没毛病,体验上一团糟——每步都弹窗确认,用户干脆直接点“全部允许”,这等于前功尽弃。

好的授权流程设计要学会“分级打扰”。第一级是静默的:日常低频只读操作,比如AI查看天气、读取公开信息,直接放行,但记录在审计日志里。第二级是轻提示:涉及读取用户私人数据,比如日历、邮件、通讯录,用一个简单的卡片提示“AI正在读取你的今日日程”,用户可以一键关闭权限。第三级是强确认:涉及写入或修改操作,提供明确的“允许/拒绝”按钮,并且默认时间是“仅本次”。第四级就是敏感操作二次确认:必须独立弹窗,并且强认证。

这套分级打扰的核心思想,是把用户的注意力用在高价值风险点上,而不是让用户忙着给日常操作盖章。我实际测试过,分级打扰比每一步都问的“等权设计”体验好上一个量级,而且用户对权限产生警惕的比例反而更高,因为精力没有被不重要的问题浪费掉。

4.2 给开发者的落地清单

如果你要做一个接入AI代登录的服务端,Poppy草案落实到代码层面大概有六个必做项。

第一,实现代理身份签发。用户在通过你的认证后,你要能签发受限的代理令牌,代理令牌必须绑定AI实例标识,不能只是主令牌的复制品。第二,实现细粒度范围解析。你的接口要能解析“资源+操作+条件”三元组,并在每次请求时实时校验。第三,实现敏感操作拦截列表。维护一份敏感操作清单,在拦截点强制触发二次确认流程。第四,实现租约续期机制。代理令牌要带过期时间,并且提供续期接口,续期时重新校验授权状态。第五,实现撤销接口。提供一个可供用户管理页调用的撤销端点,撤销后所有未完成的AI操作立即生效。第六,实现审计日志落库。日志格式可以自定,但字段完整性的底线是能回答前面说的六个问题:谁、代表谁、访问什么、做什么、何时、所以结果。

如果第六条做不到,其他五条等于白做。因为开发者自己都没法判断AI的行为是否符合预期,后续出了问题只能互相甩锅。

我在一个模拟项目X里实践过这套清单,最耗时间的其实不是授权逻辑本身,而是范围校验要跟现有业务代码融合。如果你现有的接口没有做资源粒度控制,比如一个“获取用户信息”接口同时返回邮箱和手机号,那你就没法给AI只授权邮箱而不授权手机号。所以落地Poppy之前,先梳理现有接口的数据粒度,这一步避不开。

4.3 普通用户怎么盯住这六道权限

非技术用户不需要看草案原文,但需要建立几个基本意识。

第一个意识是“AI的登录状态是会被吊销的”。不要相信任何“授权长期有效”的表述,定期到授权管理页看看有哪些AI应用在访问你的账号,不用的直接吊销。

第二个意识是“权限和任务要对得上”。AI助手说帮你管日程,却申请读取通讯录,这个请求就直接拒绝。事情和权限不匹配是最典型的越权信号。

第三个意识是“敏感操作必须自己确认”。任何情况下,如果AI替你做支付、删除、发布这类操作时没有向你确认,而是自动完成,这个AI服务就是不合规的,立即停用并向平台反馈。

第四个意识是“聊天内容不等于隐私数据”。允许AI读取你的邮件、云盘、聊天记录,和允许AI记住这些内容,是两码事。在设置里看看有没有“数据保留期限”“是否用于训练”的开关,有就主动关掉与训练相关的选项。

我经常跟朋友说的一句话是:AI助理是工具,不是主人。工具的特点是你随时能放下它,如果你发现某个AI服务让你感觉“离不开了、停不掉了”,第一步不是继续依赖它,而是立刻去体验它的撤销和删除按钮。

5. 常见问题与避坑记录

5.1 权限被拒后,AI要学会“软着陆”

一个我实际踩过的坑是:AI在权限不足时直接报错终止任务。比如AI计划读取日历、搜索天气、安排会议,前两步成功,第三步发现没有日历写入权限,然后它直接崩了,把已完成的上下文全部丢给一个报错页面。用户看到的就是“任务失败,呗试一下”。

好的做法是“软着陆”。AI应当识别具体是哪个权限被拒,然后做三件事:把已经完成的部分保存下来、告诉用户哪一步被拦截、询问用户是否要为此任务临时授权。这三件事做完,用户只需要一次点击就能继续,而不是重新发起任务。

这里对开发者的建议是:在AI代理的异常处理链里,把“权限拒绝”单独作为一种可恢复异常,而不是一揽子当作失败。这个异常要携带被拒的操作ID和剩余可执行范围,让上层的授权管理模块能精准补发权限。

5.2 静默续期永远是争议焦点

会话租约机制里,争议最大的是“静默续期”。也就是AI在租约到期时,不打扰用户,利用已有授权自动续期。支持者说这样体验好,反对者说这样等于变相永久授权。

Poppy草案在这个问题上的立场是折中的:静默续期原则上不允许,但可以设置“轻提示续期”,也就是用一条低打扰的通知告诉用户“AI的任务还在进行,已替你续期,可随时停止”。这比完全静默多一点透明度,比强制二次确认少一点打扰,目前来看是最可接受的平衡点。

我第一次跑通这套续期逻辑时有个感受:续期通知的频率最能暴露AI任务的真实活跃度,如果AI一小时要续约三次,这个AI可能真的在大量使用你的权限,需要仔细检查它在做什么。

5.3 最小权限看着安全,实际最容易过度授权

这是我踩过最大的一个认知坑。最小权限原则听起来是“给最少权限”,但在AI代理场景下反而可能导致过度授权。

原因是AI是自动执行任务的,它可能理解不了“最小权限”的边界。比如用户安排了一场会议,AI为了创建会议,只需要日历写入权限,但它同时还需要读取通讯录来找参会人邮箱。如果你只给它日历权限,任务就卡死了;如果你给它通讯录权限,它可能为了“丰富联系人上下文”去读全部通讯录。

这种情况下,最小权限反而逼着开发者一次性申请一堆权限。Poppy草案也意识到这个问题,给出的解法是“派生最小权限”和“按需逐级提升”。AI先申请当前可判断的最小权限,执行过程中发现缺失权限,再即时追加申请,而且追加申请必须带一个理由字段,比如“创建会议需要读取参会人邮箱地址”。用户在侧边栏能看到所有权限申请理由,形成一道动态审查的防线。这个解法比传统的“一次申请终身使用”要安全不少。

5.4 几个我实际遇到的坑和排查方法

权限校验不生效的排查。我在一个某跨平台系统里接入范围校验时,发现有一次越权操作没有被拦截,排查了半天发现原因是我们对“operation”字段的大小写处理不一致,系统里存的是大写READ,校验逻辑里写的是小写read。这不只是代码问题,它还说明Poppy这类草案最好在实现层面定义一套候选枚举值清单,而且所有接口统一走同一个校验网关,不要在业务代码里各写一套。

租约过期时间不同步的排查。另一个典型问题是租约过期在网关层和数据层不一致,导致AI任务还在执行,访问令牌却提前很久失效。解决方案是租约状态统一放在Redis这类集中缓存里,不会因节点本地时间偏移导致降级。

撤销信号丢失的排查。我遇到过用户点击撤销,但AI依然在运行的状况,原因是撤销消息走的是异步队列,队列堆积导致延迟。后来改成撤销消息优先投递,并且网关在收到撤销信号后主动断开当前代理会话,而不是等下一个请求进来才校验。

最后再分享一个小技巧。给AI代理做的每一个权限操作,都附带一个“操作意图ID”,这个ID贯穿授权申请、范围校验、审计日志、撤销追踪。只要这个ID链路是完整的,排查任何权限问题都可以按图索骥。

我个人在实际操作中的体会是,Poppy草案目前还是在快速成型的阶段,它解决的是“该管什么”的问题,而“怎么管好”还需要大量实践反馈。AI助理代登录这扇门已经打开,而且不可能再关上,与其担心它带来的问题,不如主动理解它的权限边界。把自己当成那个给管家发钥匙的人,权限制约不是束缚,而是安全感的来源。

RELATED READING

延伸阅读

更多一线实战笔记与深度复盘,助您持续精进