Skip to content

WP4b-SDK · 会话承载租户声明 + X-Tenant-Id 派生 (D1/D2) #10

@JIAQIA

Description

@JIAQIA

父 Story:#7(M1 入口级交付 · webui)。WP4b-SDK。⚠ 架构关键 D1/D2/D6,骨架不可返工。红线:示例数据脱敏占位。

目标

会话承载租户声明,X-Tenant-Id 由会话派生(去硬编码);结构按多租户(M1 先 1 租户跑通,结构不返工)。

背景(别被「OIDC 管线已就绪」掩盖)

鉴权路径已完整落地AppAuthProvider 运行期开关(isOidcEnabled()→真实 OIDC;DEV→mock;生产未配→fail-closed),token→Bearer、角色提取、登录守卫齐全。启用真实 OIDC = 纯部署期 config.jsoidc.authority(主仓/I3),零本仓代码未做的是租户上下文这一半

范围(文件清单)

  • packages/sdk/src/auth/session.tsSessionUser/Sessiontenant(及可选 tenants)字段。
  • packages/sdk/src/auth/extractRoles.ts(或新增 extractTenant.ts):读 JWT tenant 声明(org=租户)。
  • packages/sdk/src/auth/OidcSessionProvider.tsx + MockSessionProvider.tsx:注入 tenant 到统一 Session。
  • packages/sdk/src/api/http.tsX-Tenant-Id 由会话派生,替换硬编码 tenant-demo;无租户时的兜底。

起点(精确路径 · 真/stub/缺失)

  • 鉴权 provider/守卫/角色提取 = 真实已落地
  • tenant 链 未建SessionUser = {name,email,roles}(无 tenant);extractRoles 只读 realm_access/resource_access不读 tenanthttp.ts 第 11 行 DEFAULT_TENANT='tenant-demo' 硬编码 + TODO。

预估 LOC

~140

测试 / DoD

  • 单测:从 JWT 提取 tenant 声明;http 拦截器附带会话派生的 X-Tenant-Id;无租户兜底路径。
  • lint / vitest / build 绿。

依赖

验收

  • 会话含租户声明(真实 OIDC 从 token、mock 从 seed)。
  • 每请求恰一个 X-Tenant-Id,取自会话(非硬编码)。
  • D2 结构成立:切换租户=重换 token、X-Tenant-Id 唯一(M1 先 1 租户,结构按多租户)。

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    No type
    No fields configured for issues without a type.

    Projects

    No projects

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions