跳到主要内容

ARC 2.0.0-beta.28

调用者上下文

ARC 在受信的服务端上下文中解析调用者身份与可选的 instance membership,而不是根据 UI 消息或客户端提供的路径。

ARC 在构建 session 视图之前,先从受信凭据解析调用者信息。结果 CallerInfo 可携带 DID、认证方式、角色,以及在服务端提供受信 instance 上下文时的 instance DID。

运行时知道什么

CallerInfo(AFS 核心类型)是解析后的交接形状:

字段含义
did调用者 DID;匿名时为 null。把 null 当作匿名,不要当成哨兵字符串。
roles解析后的角色字符串(常见为单元素数组)。
pk可用时的公钥(hex)。
authMethod认证方式(例如 passkey、access-key、did-connect)。
instanceDid服务端在需要 membership 或展示上下文时盖章的 instance 标识。
displayName可选的 UI 显示名。
authSource"cookie""bearer" — 凭据从哪条通道到达。

关心 CSRF 的变更型 AFS RPC 需要 authSource: "bearer"。仅有 cookie 不足以完成这些写入。

凭据输入

共享 caller 核心(services/shared,Node 与 Cloudflare 共用)接受:

输入解析路径
Cookie: login_token=<JWT>浏览器 session JWT。
Authorization: Bearer <JWT>程序化 / 移动端 JWT(非 access key)。
Authorization: Bearer blocklet-…Blocklet-service access key。

匿名请求(无 JWT 候选且无 Authorization)解析为 null。无效或无法解析的凭据也返回 null;核心不会对普通未认证流量抛错。

Membership 叠加

Instance membership 是叠在受信服务端上下文上的一层:

  1. 服务端解析请求的 tenant / instance DID。
  2. 当该值存在时,通用 caller 路径设置 membership: true,并把它喂给 connect-service 的 resolveIdentity
  3. Connect-service 可在用户全局角色之上返回该 instance 的角色(owner / admin / member / guest)。
  4. 客户端不能靠在 UI 消息里点名 instance,或在会剥离/替换客户端 instance 头的路径上伪造头,来创造更强关系。

某些入口路径会在解析前移除或替换客户端提供的 instance 头。把它当作入口侧防护,而不是你后来发明的每个 ARC 入口的通用保证。

角色序位失败关闭

角色比较使用固定序位:

角色级别
guest0
member1
admin2
owner3

无法识别或缺失的角色映射为级别 0guest)。不要在应用代码里发明中间角色并假定运行时会承认。

把呈现与授权分开

用 session 事实决定页面是否显示某个操作。不要把该条件当成授权检查。provider 与运行时仍决定已解析调用者能否读、写、执行或遍历资源。

身份输入同样适用。文本字段、URL 参数、页面路由或 $session 替换都不能建立调用者身份。它们可以命名资源,但只有服务端凭据解析能判定「谁在问」。

面向 AUP 的同一边界说明:调用者身份与安全

证据

主张证据
共享凭据 → CallerInfo 映射services/shared/src/caller.tsmapToCallerInforesolveCallerFromCredentials
Node daemon 认证接线runtimes/node/src/daemon/auth/index.tssetupAuthServiceresolveCaller
角色失败关闭序位packages/aos/src/session/role-level.ts
CallerInfo 字段合同packages/core/src/type.ts
只读 memberships AFS 视图@aigne/afs-membersproviders/basic/members/)— 仅 list/get;不是 membership 管理 API

当前边界

本页记录调用者解析及其失败关闭的角色行为。它不记录账户创建、DID 恢复、membership 管理 UI,或完整的 instance 身份生命周期。不要从 session 里出现 DID 或角色,就推断那些流程已经存在。