身份、租户与会话绑定
身份进入调用链的顺序
Aida JWT 建立业务 principal,TenantContext 把租户和主体带入后续调用。访问业务后端所需的 credential 单独按主体获取,因此认证身份、调用上下文和后端凭证应分开阅读。
SessionBinding 的 direct 结果含明确 Agent ID,routed 结果使用 null 等待路由。Admin 是独立鉴权入口。会话选路不会把业务用户变成管理员,也不能将 Server session 与本机 session 当作同一授权标识。
可选:VMS 作为账号与权限唯一来源(钉点 e2adc9a3c325,默认关)
AIDA_IAM_VMS_SOT=true 才生效,关着时上面的链路不变。打开后:
- authMiddleware 先到服务端 IAM 会话登记表复核这次会话,不通过直接 401
IAM_SESSION_INVALID。 - 授权用的角色换成服务端按 VMS 角色映射出的
session.roles,JWT 里的 roles 不再参与授权。 - 会话按周期拿登录时的 VMS 令牌复核;VMS 登出或禁用即吊销,VMS 连不上超过 fail-closed 窗口(默认 5 分钟)也拒绝。
- 会话表默认在内存;配置库里有
iam_source_sessions表时写穿落库,但建表 SQL 还是草案。 - 另有两个也默认关的开关:只记日志的影子比对
AIDA_IAM_SHADOW,以及按租户整体替换角色映射的覆盖层。
各环境是否打开、草案是否执行都未核实。租户覆盖层现在不能授予管理角色,覆盖层版本可读、可回滚(Agent 546db3ca7)。
Admin 操作员:不再有本地跨租户超管(钉点 e2adc9a3c325)
- 种子账号
T11-admin改为本地应急账号,固定为租户 11 的tenant_admin(等同 VMS 11:26 配置管理员),库里旧值不再生效,角色与租户范围不可改;其他本地行若是super_admin/tenant_admin或全租户*一律拒绝登录。跨租户超管只能由账号源(VMS 平台超管白名单)签发;VMS 租户级管理员(AIDA_ADMIN_VMS_TENANT_ADMIN_ROLES)只得到本租户tenant_admin(Agent35c3c3b93/1d07cf06a)。 - Admin 会话令牌带来源声明:本地会话的版本是操作员状态(启用、角色、租户、密码 hash、
updatedAt)的 HMAC,状态一变旧会话即失效;VMS 会话(平台超管或 VMS 租户级管理员)每次经 effective-permissions 复核身份、租户与在用角色并重新解析来源范围,校验不可用返回 503(admin-session.ts,随1d07cf06a合入)。 - 证据:
aida-agent·packages/agent/src/config/admin-operator-roles.tsL1–56 ·effectiveLocalOperator·e2adc9a3c325;aida-agent·packages/agent/src/gateway/admin-session.tsL16–40 ·localAdminSessionVersion·e2adc9a3c325 - 未核:各环境里现有本地操作员行有多少会因此被拒;VMS 平台超管白名单在各环境的配置。
租户覆盖层、Pack 选择与 Admin 生产判定(钉点 e2adc9a3c325)
- 覆盖层不能授予管理角色(
546db3ca7):写入时拒绝OVERLAY_RESERVED_ROLE_KEYS(platform_super_admin/tenant_admin/super_admin/product/fde);读取侧external-iam再用OVERLAY_DENIED_ROLES过滤一次,旧行也不生效。 - 覆盖层版本与回滚:
GET /tenant-adaptation/versions/:version;POST /tenant-adaptation/rollback要求toVersion+expectedVersion,只回到发布过且非当前的版本,先过与当前标准包的审批角色契约校验,再追加发布为新版本并审计。 - Pack 订阅选择(
1d07cf06a):followLatest/pinVersion在 HTTP 与服务内统一校验,矛盾或格式错误时保留原订阅。Pack 发布门与 readyz 见observability-map。 - 生产判定:静态 admin token 在
NODE_ENV=production或AIDA_ENVIRONMENT判为生产时默认禁用;没有adminSession声明的 admin JWT 在生产或vms:主体上一律失效。 - VMS 账号登录 Admin(默认关):平台超管白名单之外新增
AIDA_ADMIN_VMS_TENANT_ADMIN_ROLES,VMS 配置管理员可登录为本租户tenant_admin;VMS 令牌加密留在会话里,每次请求经effective-permissions复核。 - 证据:
aida-agent·packages/agent/src/config/services/tenant-adaptation.tsL86–119 ·OVERLAY_RESERVED_ROLE_KEYS·e2adc9a3c325;aida-agent·packages/agent/src/permission/external-iam.tsL120–128 ·OVERLAY_DENIED_ROLES·e2adc9a3c325;aida-agent·packages/agent/src/permission/external-iam.tsL214–222 ·OVERLAY_DENIED_ROLES·e2adc9a3c325;aida-agent·packages/agent/src/gateway/admin-config.tsL2108–2166 ·/tenant-adaptation/rollback·e2adc9a3c325;aida-agent·packages/agent/src/config/services/scenario-pack-service.tsL484–506 ·parseTenantPackSelection·e2adc9a3c325;aida-agent·packages/agent/src/gateway/admin-auth.tsL46–54 ·staticTokenAllowed·e2adc9a3c325;aida-agent·packages/agent/src/gateway/admin-auth.tsL92–107 ·AIDA_ENVIRONMENT·e2adc9a3c325;aida-agent·packages/agent/src/gateway/admin-session.tsL74–90 ·isProductionEnvironment·e2adc9a3c325;aida-agent·packages/agent/src/gateway/vms-platform-admin.tsL1–33 ·tenantAdmin·e2adc9a3c325;aida-agent·packages/agent/src/gateway/vms-platform-admin.tsL58–72 ·AIDA_ADMIN_VMS_TENANT_ADMIN_ROLES·e2adc9a3c325;aida-agent·packages/agent/src/gateway/vms-platform-admin.tsL113–190 ·effective-permissions·e2adc9a3c325;aida-agent·packages/agent/src/gateway/admin-session.tsL140–163 ·verifyVmsPlatformAdminSession·e2adc9a3c325 - 202 环境的仓库内记录(人工记录,不是实时读取):2026-10-18 评审文档记 Jenkins
dev-aida-agent-service-shanghai已开AIDA_ADMIN_VMS_LOGIN_ENABLED=true、AIDA_ADMIN_VMS_PLATFORM_ADMIN_ROLES=900001:1、AIDA_ADMIN_VMS_TENANT_ADMIN_ROLES=11:26;同日执行记录把这些 IAM 配置迁到 Nacoscaidaocloud-aida-config并移除 Jenkins 的-e,且 202 Config DB 已建tenant_adaptations(0 行)。2026-10-11 的实测记录写 202 未声明AIDA_ENVIRONMENT(版本信息回退为 production)。证据:aida-agent·docs/design/aidawork-vms-tenant-adaptation-iam-guide-review-20261018.mdL17 ·AIDA_ADMIN_VMS_LOGIN_ENABLED=true·e2adc9a3c325;aida-agent·docs/product/kerui-vms-full-scenario/evidence/20261018-iam-tenant-adaptation/202-optional-tables-migration.jsonlL2 ·tenant_adaptations·e2adc9a3c325;aida-agent·docs/product/kerui-vms-full-scenario/evidence/20261018-iam-tenant-adaptation/202-optional-tables-migration.jsonlL5 ·vms.tenant-admin-roles·e2adc9a3c325;aida-agent·docs/product/kerui-vms-full-scenario/20260930Work业务闭环实测.mdL2179 ·AIDA_ENVIRONMENT·e2adc9a3c325 - 未核:Nacos 当前值、202 是否已补
AIDA_ENVIRONMENT;生产及其他环境的AIDA_ENVIRONMENT、VMS Admin 登录开关与两份白名单;202 以外的库是否建了tenant_adaptations。
证据与范围
aida-agent·packages/agent/src/gateway/auth.tsL402–432 ·withTenantContext·e2adc9a3c325aida-agent·docs/architecture/auth.mdL12–106 ·77fe76838aa4(历史引用:该文档已在 aida-agent44d63e20退役,钉点e2adc9a3c325无此文件;见 ATLAS-DEBT)aida-agent·packages/agent/src/permission/external-iam.tsL7–22 ·AIDA_IAM_VMS_SOT·e2adc9a3c325aida-agent·packages/agent/src/gateway/auth.tsL335–355 ·IAM_SESSION_INVALID·e2adc9a3c325aida-agent·packages/agent/src/gateway/session-binding.ts L54–84 ·agentId: string | null·e2adc9a3c325`
结论来自固定版本的静态源码与合同阅读;实现存在、默认开关和生产启用分别判断。本站代码证据面板列出声明状态与具体限制。
本地 tenant_admin 与 Credits(钉点 e2adc9a3c325)
- 迁移 189:
admin_operators角色扩到tenant_admin,并强制具体租户作用域 CHECK。 - 迁移 187 +
admitChatCredits:chat 受理按租户/用户 Credits;耗尽有专用拒绝。生产是否开通配额、共享库是否执行 187 未核实。 - IAM subject/permission gateway 多轮修复属业务/IAM 边界收紧,本轮不另成图;结论以代码为准,未逐项画图。