背景
contracts/icd/tenant-context-headers-icd.md(v1.0.0,producer: hashmatrix-gateway)§3.4 现写:
唯一租户:一个请求必须解析到恰好一个租户;多 org 成员视为歧义 → 403(不做不确定注入)。
按关键决策 D2「切换租户=重新换 token、X-Tenant-Id 唯一」,多 membership 用户的「当前活动租户」应由 token 自身表达(Keycloak Organizations 在 org-scoped token 中携带活动 org),而非一律 403。需把语义从「多 org 即歧义拒绝」修订为「解析到单活动租户、结构预留多 membership」。
本 issue 修订 ICD(主仓 owns contracts),网关侧实现见 hashmatrix-gateway#4 子项 G3(blocked by 本 issue)。
范围
contracts/icd/tenant-context-headers-icd.md
- §3.4「唯一租户」:定义活动租户来源与选择规则——优先 Keycloak
active_organization(org-scoped token),回退到「恰好单一 org membership」;多 membership 且无活动声明时的确定性行为(预留结构、不静默错注)。
- §6/§7:语义稳定性与 semver 标注(行为放宽,非破坏性改名/收紧;评估 MINOR + 通知 consumers)。
- §8 一致性校验要点同步:补「多 membership → 选定单活动租户」契约测试要点。
验收
关联
背景
contracts/icd/tenant-context-headers-icd.md(v1.0.0,producer:hashmatrix-gateway)§3.4 现写:按关键决策 D2「切换租户=重新换 token、
X-Tenant-Id唯一」,多 membership 用户的「当前活动租户」应由 token 自身表达(Keycloak Organizations 在 org-scoped token 中携带活动 org),而非一律403。需把语义从「多 org 即歧义拒绝」修订为「解析到单活动租户、结构预留多 membership」。本 issue 修订 ICD(主仓 owns contracts),网关侧实现见 hashmatrix-gateway#4 子项 G3(blocked by 本 issue)。
范围
contracts/icd/tenant-context-headers-icd.mdactive_organization(org-scoped token),回退到「恰好单一 org membership」;多 membership 且无活动声明时的确定性行为(预留结构、不静默错注)。验收
active_organization优先)与回退/预留规则,删去「多 org 一律 403」表述acme/tenant-demo)关联
X-Tenant-Id唯一)