演进路线:OS-skill 模块融合决策
August 21, 2026 · View on GitHub
来源:01men/OS-skill(企业级 AI 应用可复用功能模块集锦) 原则:选择性融合——只吸收对插件化平台有长远建设价值、且符合 dsh「一切皆插件」规范的设计; 暂缓项明确记录触发条件与实施手册出处,避免盲目堆功能。
一、已融合(v1.1)
| # | 融合项 | 来源模块 | 落点(dsh 插件) | 长远价值 |
|---|---|---|---|---|
| 1 | IdentityProviderAdapter 统一抽象:buildAuthorizeUrl / exchangeCode / getUserInfo / normalizeProfile + 三场景归一(web_qr/h5/in_app)+ NormalizedProfile | auth-identity docs/03 | plugin-iam/src/providers.ts | 登录主流程面向接口编程;接入真实钉钉/飞书/企微只需替换 Adapter 实现与凭证配置,零改主流程 |
| 2 | 身份链接事实源 + 引擎级唯一约束:iam:identityLinks 集合,collection.uniqueOn() 模拟数据库部分唯一索引(provider+providerUserId 活跃唯一);「禁止先查后插」红线工程化到存储引擎,users/orgs 同受益 | auth-identity docs/01/02 红线 | platform-core/src/storage.ts、plugin-iam | 一人一号由引擎兜底,并发/竞态下不可能产生重复绑定——平台数据完整性的通用底座能力 |
| 3 | refresh_token 轮转链 + sid 会话:access 30min + refresh 7d(仅存 SHA-256 哈希)、单次轮转、重放检测→整链吊销;sid 贯穿会话,登出/封禁按会话即时吊销 | auth-identity docs/06 | plugin-authn | 令牌体系达到生产基线;前端 401 静默续期,体验与安全兼得 |
| 4 | OAuth state 防 CSRF + code 一次性消费:beginSso 签发一次性 state(10min),completeSso 消费校验;授权码 5 分钟窗口内单次消费 | auth-identity docs/07 攻击演练 | plugin-authn | 登录攻击面收敛,自测覆盖三类重放演练 |
| 5 | 未命中三分支:三方登录未命中 → 待绑定票据(5min 一次性)→「绑定已有账号(验密)/ 注册新账号」 | auth-identity docs/04/05 | plugin-authn + plugin-console(REST + 登录页 UI) | 首次三方登录的标准产品化流程,而非直接报错 |
自测新增 15 项安全演练断言(state 重放/伪造、code 重放、refresh 重放整链吊销、 密码错误不烧票据、一人一号引擎拒绝、注册分支),合计 97/97 通过。
二、暂缓项(记录触发条件与实施手册)
| 暂缓项 | 来源 | 触发条件 | 实施要点(届时照做) |
|---|---|---|---|
| 多租户三层隔离(网关注入 X-Tenant-Id + 剥离客户端伪造头 + ORM 强制 scope;「不存在全局角色」,角色只挂 organization_members) | auth-identity docs/06 | 平台从「单组织树」演进为「多租户 SaaS」时 | 先改 ER(organization_members 中间表),再三层依次落地;本平台 users.orgId+orgSubtreeIds 数据权限是它的单租户简化形态 |
| 非对称签名 RS256/ES256 + JWKS 轮换(私钥不出身份服务) | auth-identity docs/06 | 网关/多服务分别验签成为需求时 | 当前单服务 HMAC 已够用;升级路径:authn 插件内换库 + 暴露 /.well-known/jwks.json |
| 账号合并(人工确认 + 事务迁移) | auth-identity docs/05 | 出现真实重复账号治理需求时 | 两活跃账号禁止自动合并;迁移 membership/资源需事务 + 审计 |
| 最后登录方式保护 | auth-identity docs/05 红线 | 引入「无密码纯三方账号」时 | 当前平台账号必有密码(密码即保底登录方式),红线天然满足 |
| 钉钉机器人渠道(OAuth 识别 → 单聊推送 → jumprobot 唤起) | dingtalk-robot-oauth 全模块 | AI 应用「渠道接入」排期时(app.attrs.channels 已预留) | 实施手册:OS-skill modules/dingtalk-robot-oauth/SKILL.md(含 5 个实测坑:企业 token 仅 POST、chatbotUserId 获取、webhook 公网要求、整页跳转、端口残留);建议以 dsh-plugin-channel-dingtalk 新插件落地,向 app 插件注册渠道扩展点 |
三、融合过程沉淀的工程规范
- 存储引擎唯一约束(
collection.uniqueOn(label, keyOf))已成为平台通用能力: 后续任何集合需要业务唯一性时,在访问器中声明即可,insert/update 自动校验并抛错。 - Service 内跨服务访问必须在插件
inject声明(cordis 严格服务隔离);插件不得 inject 自己提供的服务(循环等待)——执行器闭包直持服务实例(见 agent/app/mcp 插件 apply)。 - 异步边界三查:Adapter 链路(exchangeCode/getUserInfo)必须逐级
await; HTTP 处理器调用 async 服务方法必须await;Node 原生 TS 运行不支持参数属性语法。