用途:为 keycloak-alpha 平台落地基于组织的多租户隔离,使用共享数据库加 org_id 隔离的思路。适用场景包括:实现带 org_id 声明的多租户架构、搭建数据库隔离策略、配置按组织区分的主题、构建租户开通流程、保证数据隔离与安全、实现跨租户访问控制、管理组织范围资源。
主要能力:
- JWT 与认证。Keycloak 作为身份提供方,统一管理所有组织用户并签发含 org_id 的 JWT;通过协议映射器把用户属性 org_id、org_name 写入令牌。API 网关校验令牌(RS256、audience account、issuer 指向 realm),提取 org_id 后透传给 8 个微服务。中间件强制校验 org_id 是否存在,缺失即拒绝;requireOrgAccess 可校验资源 org_id 与当前组织是否一致,仅 super_admin 可跨组织访问。
- 数据隔离。MongoDB 采用共享库、org_id 索引,集合上建立 org_id 复合唯一索引,并通过 Repository 模式始终按 org_id 过滤;更新时禁止修改 org_id。PostgreSQL 启用行级安全,策略以 current_setting('app.current_org_id') 限定行,连接时用 set_org_context 设置组织上下文。
- 主题切换。通过 orgId 到主题名的映射选择主题,登录跳转 Keycloak 时携带 kc_theme 参数,前端按组织加载主题配置并应用 CSS 变量。
- 租户开通。开通流程按顺序执行:生成 org_id、创建组织记录、在 Keycloak 建立组织组与管理员用户、把用户加入组、初始化数据库集合、创建默认主题(后续步骤在资料中未完整给出)。
限制与未提供内容:资料未给出完整安装命令、部署方式、收费与价格信息,也未完整收录开通流程后续步骤;示例代码中出现的本地地址、默认口令等仅用于演示,实际使用需替换为真实配置。