OpenWork 接入 Microsoft Entra ID:SAML SSO 与 SCIM 用户自动供给实战指南 📅 发布时间:2026/9/13 15:43:30 👁 浏览次数: OpenWork 接入 Microsoft Entra IDSAML SSO 与 SCIM 用户自动供给实战指南【免费下载链接】openworkThe open-source alternative to Claude Cowork (powered by opencode)项目地址: https://gitcode.com/GitHub_Trending/ope/openwork本指南讲解如何将 Microsoft Entra IDAzure Active Directory连接到 OpenWork 组织实现 SAML 单点登录SSO与 SCIM 用户/组自动供给。文章以 OpenWork 仓库中的官方接入文档为主体结合源码级实现Better Auth 插件接入、组织级路由与策略深入展开读完即可独立完成 Entra 企业应用的创建、SAML 双向对接、SCIM 供给配置、验证与故障排查全流程。OpenWork 的 SSO/SCIM 架构Better Auth 之上的组织级封装OpenWork 的 SSO 与 SCIM 能力并不是从零实现的协议栈而是基于 Better Auth 中直接导入了better-auth/scim与better-auth/sso两个插件见该文件import { scim } from better-auth/scim与import { sso } from better-auth/sso并在其上叠加了 SAML 响应策略、SCIM 去激活拦截、JIT 成员供给等自定义逻辑。OpenWork 暴露给管理员与协议对端的表面路由如下区域OpenWork 表面运行时行为SSO 管理/dashboard/sso、/v1/sso、/v1/sso/saml、/v1/sso/oidc每个组织只允许一条 SSO 连接Owner 与安全管理员可创建或替换它SAML 回调/api/auth/sso/saml2/sp/acs/openwork-sso-org-idOpenWork 先校验 SAML 响应策略再由 Better Auth 消费响应SAML 元数据/api/auth/sso/saml2/sp/metadata?providerIdopenwork-sso-org-id在 OpenWork 保存 SAML 连接后生成SSO 登录入口/sso/org-slug发起单组织的 SP 发起式 SSO并跳转到 EntraSCIM 管理/dashboard/scim、/v1/scim、/v1/scim/tokenOwner 与安全管理员创建或轮换组织级 SCIM Bearer TokenSCIM 供给/api/auth/scim/v2支持 SCIM 用户创建、更新与去供给从路由实现看ee/apps/den-api/src/routes/auth/index.ts 中对/api/auth/sso/saml2/callback/*与/api/auth/sso/saml2/sp/acs/*两个路径都挂载了samlResponsePolicyMiddleware来自sso-saml-response-middleware.ts这正是OpenWork 先校验 SAML 响应策略、再交给 Better Auth的实现位置。OpenWork 对组织 SSO 强制执行以下 SAML 安全设置强制要求签名后的 SAML 断言signed SAML assertions。仅通过组织专属的 provider ACS URL 接受 IdP 发起的 SAML。强制要求 SAML 时间戳。拒绝已弃用的 SAML 算法。SSO 登录会写入外部身份链接external identity link并执行组织成员的 JITJust-In-Time创建。对于被组织 SSO 或 SCIM 连接托管的用户拒绝其使用邮箱/密码方式登录。一个需要特别说明的边界OpenWork 目前不支持 SCIM Group 对象供给。你可以将 Entra 用户和组分配给企业应用以控制范围但必须保持 Entra 的组对象映射group object mapping处于关闭状态。前置条件在开始之前请确认以下条件全部满足一个拥有安全配置权限的 OpenWork 组织 Owner 或管理员。一个有权管理企业应用的 Microsoft Entra 账户。Microsoft 官方将此角色描述为 Cloud Application Administrator、Application Administrator或 SSO 配置所用服务主体的 Owner。OpenWork 的公开 Web 与 Auth URL 必须是已定稿的 HTTPS URL。生产环境中不应让 SAML 与浏览器 Auth Cookie 去校验临时的 HTTP 源origin。OpenWork 组织应在组织设置中提前配置好期望的邮箱域名email domain再将该域设为 SSO 强制域。OpenWork 组织必须已启用 SSO/Enterprise 权益entitlement。未启用时OpenWork 会保持表单可编辑但保存时会拒绝并提示SSO / SAML requires an Enterprise plan。这一限制在源码的权益校验ee/apps/den-api/src/entitlements.ts链路中得到印证。OpenWork Labs 测试租户参考值若你在 OpenWork Labs 测试租户中演练可参考以下值Tenant ID2b853de0-b14b-4433-90be-cced1b963647OpenWork SSO 域名omaropenworklabs.onmicrosoft.com测试用户omar2omaropenworklabs.onmicrosoft.comomar_openworklabs.com#EXT#omaropenworklabs.onmicrosoft.comOpenWork 组织Omar Azure Test文档记录截至 2026 年 7 月 7 日上述两个测试用户均已分配到 Entra 中的OpenWork Labs企业应用且 OpenWork Cloud 组织具备保存 SSO 设置所需的 Enterprise 权益。创建或选择 Entra 企业应用打开 Microsoft Entra 管理中心。进入Entra ID-Enterprise apps-All applications。选择已有的 OpenWork 企业应用或为 OpenWork 新建一个非库non-gallery企业应用。在Users and groups下至少分配一个测试用户或测试组。配置 SAML SSOSAML 对接存在一个双向交接OpenWork 需要先拿到 Entra 的 IdP 值才能保存连接而 Entra 需要 OpenWork 生成的 ACS URL 才能完整测试 SAML。请严格按顺序操作。在 Entra 企业应用中打开Single sign-on选择SAML。在 Entra SAML 页面复制以下 IdP 值Microsoft Entra Identifier填入 OpenWork 的IdP Issuer URL。Login URL填入 OpenWork 的SAML Entry Point。Certificate (Base64)将 PEM 证书粘贴到 OpenWork 的IdP Certificate。在 OpenWork 中打开Dashboard-SSO选择SAML。填写 OpenWork 字段IdP Issuer URLEntra 的Microsoft Entra Identifier。注意这是 IdP issuer而不是 Entra 应用自身的 Identifier / Entity ID。Domain应使用该 SSO 连接的邮箱域名例如example.com。SAML Entry PointEntra 的Login URL。Audience URL留空则使用 OpenWork Auth URL或填写一个稳定的 Entity ID并同步将其设置为 Entra Identifier。IdP CertificateEntra 的 Base64 证书以 PEM 文本形式粘贴。在 OpenWork 中保存 SSO 连接。对于example.com这类自定义域名先在 OpenWork 请求域名验证 TXT Token发布到 DNS再点击Verify domain。对于以.onmicrosoft.com结尾的 Microsoft 租户域名OpenWork 会根据匹配的 Entra 租户 issuer 与 SAML entry point 直接完成域名验证无需在 Microsoft 的onmicrosoft.com区域下发布 DNS 记录。复制 OpenWork 生成的值ACS URL、Metadata URL、Sign-in URL。回到 EntraSingle sign-on-Basic SAML Configuration设置Identifier (Entity ID)OpenWork 的 audience。若 OpenWork audience 留空则使用部署文档或元数据中展示的 OpenWork Auth URL。不要在此处使用 Entra 的https://sts.windows.net/.../issuer。Reply URL (Assertion Consumer Service URL)OpenWork 的ACS URL。Sign on URLOpenWork 的Sign-in URL。保存 Entra SAML 配置。在 EntraAttributes Claims中确认 OpenWork 能收到email用户邮箱通常是user.mail在mail为空的租户中回退到user.userprincipalname。displayName用户显示名。Name ID类邮箱的稳定用户标识符。使用已分配用户从 OpenWork 的/sso/org-slugURL 或 Entra My Apps 磁贴测试。对于多组织用户org slug、Entra 应用与 ACS URL 共同决定其进入哪个 OpenWork 组织。OpenWork Labs 测试租户的 SAML 字段示例IdP Issuer URLhttps://sts.windows.net/2b853de0-b14b-4433-90be-cced1b963647/Domainomaropenworklabs.onmicrosoft.comSAML Entry Pointhttps://login.microsoftonline.com/2b853de0-b14b-4433-90be-cced1b963647/saml2Audience URL留空除非你同时设置了自定义 Entra Identifier。留空时将 Entra 的Identifier (Entity ID)设为 OpenWork Auth URL而不是sts.windows.netissuer。IdP Certificate粘贴 Entra 当前有效的 SAML 签名证书。关于启用前必须测试的补充说明仓库配套文档 packages/docs/cloud/sso-microsoft-entra.mdx 还补充了两个重要细节建议一并执行OpenWork 在域名验证完成、真实认证测试通过、并显式启用 SSO 之前会一直将新 SSO 配置保持为禁用状态。配置期间请保留密码或其他恢复登录通道。SAML 签名要求Signing Option为Sign SAML assertion、Signing Algorithm为SHA-256。若 Entra 只签名 response 而不签名 assertion回调会以saml_error/Invalid SAML response失败——这与 OpenWork 强制签名断言的策略一致。启用流程在 OpenWorkSettings → SSO选择Enable Config / Enable SSO在测试对话框中执行SSO Login完成 Microsoft 认证后确认Authentication test successful再点击Enable SSO。测试链接有效期约 5 分钟编辑过 SSO 配置后必须重新测试才能再次启用。JIT 供给与角色边界Entra SAML SSO 对已验证域名启用后OpenWork 的标准登录流程会将具有该邮箱域名的用户路由到组织 SSO 流程。用户成功完成 SAML 登录后OpenWork 会以默认Member角色 JIT 创建其组织成员身份。JIT 供给只发生在 SAML 认证成功之后用相同域名创建邮箱/密码账户并不会把用户加入组织或产生 SCIM 托管身份。另外OpenWork 不会把 SAML 属性如role、groups、admin转换为组织内的高权限角色——Owner/超级管理员需要在 OpenWork 内分配角色所有权变更需走所有权转移流程。配置 SCIM 用户与组供给SCIM 管理入口与认证实现位于 ee/apps/den-api/src/routes/auth/scim.ts该路由以scimBearerToken作为安全方案缺失或无效时返回 401并调用resolveScimProviderFromBearerToken依据 Bearer Token 解析对应的供给方再通过syncExternalIdentityFromScimResource等函数同步外部身份。操作步骤如下在 OpenWork 打开Dashboard-SCIM。复制SCIM base URL通常以/api/auth/scim/v2结尾。创建或轮换连接器 Token并立即复制 Bearer Token。OpenWork 只在创建或轮换后展示一次完整 Token。在 Entra 企业应用中打开Provisioning。将Provisioning Mode设为Automatic。在Admin Credentials下设置Tenant URLOpenWork 的SCIM base URL。Secret TokenOpenWork 的 SCIM Bearer Token。点击Test Connection。打开Mappings保持用户供给user provisioning开启。当 Entra 组需要管理 OpenWork 团队时启用组对象供给group object provisioning。使用 OpenWork 可按其过滤的匹配属性通常是userName映射自userPrincipalName或mail。在 OpenWork 中若供给的组应创建并管理对应的 OpenWork 团队则启用Create teams from SCIM groups关闭该选项则只保留组元数据、不改变团队。在Settings下选择范围scope。受控灰度发布时只同步已分配assigned的用户与组。在测试连接与映射都正确后再打开Provisioning Status。SCIM 生命周期与团队同步的补充要点配套文档 packages/docs/cloud/scim-microsoft-entra.mdx 对上述流程做了更细的补充在 Entra 的Provision on demand中测试组供给时请确保测试组内已有至少一个已分配测试用户并在Selected users中显式勾选最多 5 名成员。Entra 的按需组流程对空组或未选成员时可能返回通用内部服务器错误该错误可能发生在 Entra 向 OpenWork 发送组创建请求之前Entra 的常规后台供给周期仍可同步空的已分配组。正式开启定时供给后供给是增量的新分配的对象可能要到下一个周期才出现请用 Entra 的Provisioning logs区分待执行周期与操作失败。SCIM 托管团队应在 Entra 侧变更而不是在 OpenWork 内手工编辑OpenWork 会把手动创建的团队与 IdP 托管的团队区分开。若想通过 Entra 组授予组织Admin角色需要由 OpenWork Owner/超级管理员在团队管理界面显式审批该同步团队Team Admin accessEntra 组名与 SAML 组属性本身不会授予提升权限。移除用户出组后需等待供给成功并确认继承权限已消失。验证清单对接完成后逐项核对OpenWork 的/sso/org-slugSign-in URL 能跳转到 Entra完成 SP 发起式 SSO。Entra My Apps 或测试启动能把 SAML response 投递到 OpenWork 生成的 ACS URL。首次 SSO 登录会创建或更新 OpenWork 用户与组织成员。当组织域要求 SSO 时被托管用户使用邮箱/密码登录会被拒绝。Entra SCIMTest Connection成功。供给一个已分配测试用户后OpenWork 中创建了对应的用户与组织成员关系。启用团队同步时供给一个组会创建对应的 OpenWork 团队。移除分配后会保留一条断连的成员记录只有当该用户没有其他有效组织成员关系时OpenWork 才会删除其全局用户。故障排查症状可能原因修复Entra 提示 reply URL 无效Entra Reply URL 与 OpenWork 生成的 ACS URL 不匹配保存 SAML 连接后从 OpenWork 复制 ACS URL 粘贴到 Basic SAML ConfigurationMicrosoft 对https://sts.windows.net/.../报AADSTS700016Entra 把 IdP issuer 当成了 SP Entity ID / 应用标识将 EntraIdentifier (Entity ID)设为 OpenWork audience/auth URL并在 OpenWork 重新保存 SSO 连接使 AuthnRequest 使用 OpenWork SP Entity IDSAML 登录因 audience 或 recipient 错误失败Entra Identifier、OpenWork Audience URL 或 ACS URL 不一致保持 Entra Identifier 等于 OpenWork audience、Entra Reply URL 等于 OpenWork ACS URL更换证书后 SAML 登录失败OpenWork 仍保存旧 IdP 证书将新的 Entra Base64 证书粘贴到 OpenWork 并重新保存 SAML 连接IdP 发起登录失败报unsolicited_response部署运行的是旧版 OpenWork拒绝 IdP 发起的 SAML升级 OpenWork或从 OpenWork 的/sso/org-slugSign-in URL 发起登录SCIM 测试连接未授权Token 复制错误或配置 Entra 后 Token 已被轮换轮换 OpenWork SCIM Token并同步更新 Entra 的 Secret TokenEntra 组供给失败OpenWork 尚不支持 SCIM Group 对象关闭组对象映射仅用组分配来控制用户供给范围参考文档OpenWork 官方配套文档Microsoft Entra SAML SSO 与 Microsoft Entra SCIM provisioning认证与策略源码ee/apps/den-api/src/auth.tsBetter Auth SSO/SCIM 插件接入、ee/apps/den-api/src/routes/auth/scim.tsSCIM 路由与 Token 鉴权、ee/apps/den-api/src/routes/auth/index.tsSAML 回调挂载 SAML 响应策略中间件MicrosoftEnable SAML single sign-on for an enterprise application详见 packages/docs/cloud/sso-microsoft-entra.mdx 内引用的微软官方文档MicrosoftManage automatic user account provisioning、Develop and plan provisioning for a SCIM endpoint、Customize provisioning attribute mappingsBetter Auth SSO 插件与 SCIM 插件官方文档【免费下载链接】openworkThe open-source alternative to Claude Cowork (powered by opencode)项目地址: https://gitcode.com/GitHub_Trending/ope/openwork创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考