SuperAPI AI 工具集

oracle-idcs-org-provisioning

安全与审计

查看项目

更新于 10-15 08:17

技能介绍

用途

Oracle IDCS Org Provisioning 用于在 OAuth 登录成功之后,把 Oracle IDCS 返回的声明(claims)真正落地为 Oracle 中的租户、角色与组织成员关系。当登录本身已经成功,但租户归属、角色分配或 org membership 仍需在 Oracle 侧建立时,使用该技能。

以下情况不应加载该技能:

  • 问题属于 Fastify 头部桥接或 cookie/session 转发;
  • 问题属于基础 OIDC 配置、回调 URL 或可信来源;
  • 任务是在现有代码库中重命名 IDCS 概念。

主要能力

该技能围绕三阶段流程组织:

  1. 在 OAuth 资料映射阶段(mapProfileToUser)捕获 IDCS 声明;
  2. 当存在显式 allow-rules 时,在 session.create.before 钩子中对会话进行门控;
  3. 在 session.create.after 钩子中解析组织并 upsert org_members。

技能还给出若干必须遵守的约束:

  • 绝不把访问门控与角色映射合并——它们是两个独立决策,具有不同的失败模式;
  • 绝不先 SELECT 再 INSERT 到 org_members——应使用原子 MERGE INTO,否则并发登录会破坏成员关系;
  • 绝不在 before 中消费缓存声明后还期望 after 中仍可用——应使用 stash/peek/consume 模式;
  • 绝不用更新的回退逻辑绕过已有成员关系优先级——否则会导致重新登录不稳定;
  • 绝不把缺失 groups 声明当作 provisioning bug——应先检查 scope 配置与 IDCS 应用。

使用方式

技能提供专家决策树,覆盖以下关键判断点:

访问门控 vs. 角色映射

两者回答不同问题:

  • 访问门控(before 钩子):该用户能否进入?由数据库配置的 allow-groups 控制。仅当存在显式 allow-groups 时失败关闭(fail closed),否则失败开放(fail open)。
  • 角色映射(after 钩子):该用户获得哪个角色?由 group→role 映射与环境默认值控制。

混合两者会产生误锁定:用户通过了访问门控,却因门控逻辑短路了角色解析而获得错误角色。

组织解析优先级

始终按以下顺序,绝不为了“简单”跳过某一级:

  1. org_members 中的现有成员关系;
  2. 租户名 → 组织映射(数据库配置);
  3. 数据库配置的默认组织;
  4. 环境默认组织。

在部署中途更改此顺序,会破坏此前通过更高优先级规则分配的用户重新登录。

首个管理员引导

全新安装时没有任何管理员组配置。如果某组织尚无管理员,则一次性将首个完成 provisioning 的用户提升为管理员。没有这道门,系统将无法引导——因为没有人拥有管理员权限,也就没人能配置 allow-groups。

跨钩子边界的声明缓存

钩子运行在各自独立的请求生命周期中。mapProfileToUser 中的声明集在 session.create.after 中不会自动可用,除非显式传递:

  • 在资料映射中 stash(sub, claims);
  • 在 before 中 peek(sub)(读取但不清除);
  • 在 after 中 consume(sub)(读取并清除)。

标准做法是使用以 sub 为键的短生命周期内存缓存,TTL 约 30 秒即可。

按决策点划分的失败模式

情况 决策
无 groups 声明 先检查 scope 与 IDCS 应用配置,再动 provisioning 代码
无显式数据库 allow-groups 失败开放——不锁定
数据库查询或写入失败 登录失败开放并记录日志——锁定绝不能是默认结果
组织尚无管理员 一次性提升首个完成 provisioning 的用户

脚本

预览组 → 角色映射:

node scripts/preview-group-role-mapping.js "PortalAdmins,Developers"

预览组织解析:

node scripts/verify-org-resolution.js --tenant sandbox --map "sandbox:org-123,prod:org-999" --default-org org-000

参数

$ARGUMENTS:可选的 provisioning 关注点

  • tenant-map — 聚焦租户→组织解析;
  • first-admin — 聚焦引导逻辑;
  • (空)— 评估完整的 IDCS 声明 → 组织成员关系流程。

适用场景

  • Oracle IDCS OAuth 登录成功后,需要将声明落地为组织成员关系;
  • 需要区分访问门控与角色映射的 provisioning 实现;
  • 需要处理组织解析优先级、首个管理员引导、跨钩子声明传递等具体问题。

限制

资料未提供该技能的收费、价格、平台支持范围或效果保证等信息。