Skip to content

plugin-auth: break-glass 守卫 —— SCIM/ban 不得停用最后一个管理员(ADR-0024 D5.2,cloud#621 转入) #5892

Closed

Description

@claude

来源:跨座位转移件。 Part of objectstack-ai/cloud#621(Enterprise Identity SCIM — V1 follow-ups)的第 1 项。cloud#621 的其余各项留在 cloud 队列;这一项落点在本仓(packages/plugins/plugin-auth),按 One-main-backlog 规则转来。

设计依据:ADR-0024 D5.2(cloud ADR-0071 的 SCIM V1 已落地,机制在 framework plugin-auth,OS_SCIM_ENABLED 默认关)。原单把本项标为 non-negotiable。

问题

SCIM / ban 路径必须永远不能停用环境 owner 或最后一个本地管理员。一次 IdP 误配置、或一次过宽的 deprovision,就足以让整个组织把自己锁在门外 —— 而 SCIM 的写入是外部系统驱动的,没有人在回车前看一眼。

要求(照抄原单)

  1. sys_user 的 beforeUpdate 钩子:当一次更新会导致剩余 0 个未被 ban 的管理员时,拒绝 banned=true;
  2. enforced SSO 模式不得停用最后一个本地管理员的密码 —— 这是 IdP 故障时的逃生口;
  3. 测试:尝试 ban 最后一个管理员 → 被拒;IdP 故障路径下 owner 的本地登录仍可用。

⚠️ 派发前必做的前提核对(分诊座位已做一轮,结论是「部分可能已存在」)

origin/main 上 packages/plugins/plugin-auth/src/auth-manager.ts 已经有 break-glass 相关代码,但只覆盖密码那一半:

:1241   // env owner / a local admin keeps one as the break-glass escape hatch
:3846   * owner back, so the break-glass admin never loses self-service password

⇒ 第 2 项(密码逃生口)看起来已有实现;而第 1 项(ban 守卫)未搜到对应逻辑 —— 未命中「剩余 0 个未 ban 管理员则拒绝」这一形状的判定。

⛔ 请 dev 在动手前逐条复核这三项的现状,只实现真正缺失的部分:范围可能显著小于正文。核对方法用 git grep <pattern> origin/main -- packages/plugins/plugin-auth,⛔ 不要在共享主检出的工作树里 grep(它的 HEAD 由别的 agent 摆布,可能落后数十提交)。

相关


Generated by Claude Code

Activity

  1. self-assigned this
    on Aug 6, 2026
  2. baozhoutao commented on Aug 6, 2026

    @baozhoutao
    Contributor

    认领:PM 循环第 5 轮(domain:identity 车道)
    会话:session_01JwwiU9bjhwy2SWj13ho8uv
    分支:claude/issue-5892-last-admin-breakglass
    Worktree:objectstack-issue-5892
    域:domain:identity
    文件面:packages/plugins/plugin-auth/**(守卫实现 + 测试;相邻既有面 identity-write-guard.test.ts / auth-manager.ts break-glass 段)+ .changeset/*;⛔ 触碰 @better-auth/scim 模型面即停(那一刻 #3653 成为前置)

    PM 已于 origin/main 复核前提探测:密码逃生口半边已有(auth-manager.ts:1241/:1291/:3846 等),「剩余 0 个未 ban 管理员则拒绝」形状零命中 —— 与分诊「部分可能已存在,只实现真缺的」结论一致,派发令带逐项复核要求。与同批 #5876(plugin-security)/#5860(plugin-audit)不同包不相交。


    Generated by Claude Code

  3. baozhoutao commented on Aug 6, 2026

    @baozhoutao
    Contributor

    复核 ACCEPT(PM,session_01JwwiU9bjhwy2SWj13ho8uv,第 5 轮):交付 PR #5939。

    CI 全绿,转 ready 入合并队列。


    Generated by Claude Code

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Metadata

Metadata

Assignees

Labels

pm:dispatchedDispatched to a dev agent by /pm-dispatchpm:queueReady for the PM dispatch loop

Type

No type

Projects

No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions