You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
reacted with thumbs up emoji reacted with thumbs down emoji reacted with laugh emoji reacted with hooray emoji reacted with confused emoji reacted with heart emoji reacted with rocket emoji reacted with eyes emoji
Uh oh!
There was an error while loading. Please reload this page.
-
相关:#505(NyxID as Capability Broker scope)、aevatarAI/aevatar#375(Aevatar 线上零 secret material + broker 边界),本提案对应 Aevatar 侧 discussion:aevatarAI/aevatar#400
背景
Aevatar 侧的 Lark bot 现在是个"共用账号":任何人跟 bot 聊天都走 bot owner 的 NyxID 配置。产品方向要把 Lark bot 升级成带鉴权的 CLI 壳——每个 Lark user 用
/init绑定自己的 NyxID 账号,之后他发的消息用自己的 LLM 额度、tool 权限、capability 跑。更一般地:这是"第三方平台的外部 subject(Lark user / Telegram user / Discord user)绑定到 NyxID subject"的问题。Aevatar 是第一个消费方,但这个能力一旦建好,Aexon、Chronograph、未来任何走 NyxID 的 agent host 都能复用。
对 NyxID 的判断
这个需求不要求 NyxID 做 general vault。它要求的是 NyxID 把现有能力连起来:
jwt_keys+ JWKS/api/v1/keysbroker.ListAsync的数据源/cli-auth登录页binding_jti参数即可新增的只是"binding 的 lifecycle 管理 + 回调",不是从零做凭证中心。
建议的新 API(草案)
1. 签发 binding challenge
2. 交互页扩展
/cli-auth?binding_jti=<jti>—— 复用现有 CLI login 页的大部分逻辑,登录完成后多一步:把 challenge 消费掉 + 记录(nyx_subject, external_subject)绑定 + 触发回调。UI 上需要对用户展示"你正在授权把 Lark 账号
ou_user_yyy绑定到你的 NyxID 身份,绑定后这个 Lark 账号发送给 MyBot 的消息将使用你的 LLM 额度和配置"。3. 回调 Aevatar
重要:这是 JWT-only 认证,没有 shared secret,跟 aevatarAI/aevatar#366 的 relay callback 协议同构。Aevatar 侧用现有
NyxIdRelayAuthValidator换个aud就能复用。4. 查询 binding
Aevatar 侧的
broker.ResolveBindingAsync走这个。生产调用频次高,建议打 Aevatar cache + 合理的失效策略(NyxID 侧可以后续加 webhook 通知 revoke)。5. Revoke
用户侧也应该能在 NyxID 个人中心看到"我绑了哪些 external subject"并主动解绑。
跟 #505 capability broker 的关系
本提案是 #505 的身份侧前置条件:broker 要 issue capability handle,得先知道"正在请求的 external subject 对应哪个 NyxID user"。没有 binding 这层,capability broker 在 multi-sender 场景下拿不到 subject,就只能 fallback 到"调用方身份"(= bot owner),等于退回到今天 Aevatar 的问题根源。
建议把本提案纳入 #505 的 scope,拆成两条并行工作项:
Track A 的 OpenAPI 可以先冻结,Track B 慢慢选型,两者不互相 block。
待决问题
(nyx_subject, external_subject)是 1:1 还是 1:many?为什么值得做
评论区留给协议细节、UX、scope 讨论。
Beta Was this translation helpful? Give feedback.
All reactions