Label Studio Enterprise SCIM 集成:用户与用户组自动化同步工作流及 API 指南

📅 发布时间:2026/9/13 0:54:23
Label Studio Enterprise SCIM 集成:用户与用户组自动化同步工作流及 API 指南
Label Studio Enterprise SCIM 集成用户与用户组自动化同步工作流及 API 指南【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio本文以 Label Studio Enterprise 的 SCIMSystem for Cross-domain Identity Management跨域身份管理系统标准实现为主线系统讲解如何通过 SCIM 实现用户/用户组的自动供给provisioning与回收deprovisioning、组织级与项目级角色映射、工作区成员自动分配并完整给出 Users、Groups、Settings 三类 SCIM API 端点的调用方式与请求示例。读完本文你将掌握在 Label Studio Enterprise 中基于 IdP身份提供商驱动的身份治理方案以及如何通过Organization SCIM页面或/api/scim/settings接口配置角色与工作区映射。SCIM 在 Label Studio Enterprise 中的定位SCIM 是一个开放标准用于在身份域或 IT 系统之间自动化交换用户身份信息。它的设计目标是让云应用与服务中的用户管理更简单、更高效从而减少用户管理所需的时间与资源。对于使用 Label Studio EnterpriseLSE的组织而言SCIM 提供了一套流线化的用户身份与访问权限管理手段。通过集成 SCIM管理员可以自动化用户的供给provisioning与回收deprovisioning跨系统同步用户数据确保正确的人员在 Label Studio Enterprise 内获得其所需的资源访问权限。SCIM 的配置与 SSO 集成绑定在一起在使用 SCIM 之前必须已经完成 SSO 配置Okta、Microsoft Entra ID 等主流 IdP 的 SCIM 集成均基于 SSO 建立并且需要一个与组织 Owner 角色绑定的 Legacy token 作为调用 SCIM 端点的凭据。完整的开通前置步骤与 Okta / Entra ID 分步配置向导见 scim_setup本文专注于 SCIM 的工作流与 API 语义。需要说明的是SCIM 能力属于 Label Studio Enterprise 功能tier 标记为 enterprise对应的 SCIM2 服务端实现基于 django-scim2 库构建遵循 SCIM RFC 7644 中关于用户、组与查询过滤的标准定义。SCIM 工作流SCIM 能做什么在 Label Studio Enterprise 中通过 SCIM 你可以完成以下身份管理操作操作说明添加用户IdP 侧分配应用后SCIM 自动在 LSE 中创建对应用户移除用户将用户角色置为Deactivated撤销其 Label Studio 访问权限将用户分配到组通过 Group 资源的成员关系维护用户归属将用户从组中取消分配移除 Group 资源中的成员条目将组映射到用户角色组→角色的映射定义在 Label Studio 中而非 IdP 中关键设计要点是组Groups本身定义在 IdP 中Label Studio 并不创建组但“组到角色”的映射规则定义在 Label Studio 内。也就是说IdP 负责维护“谁属于哪个组”Label Studio 负责解释“这个组拥有什么角色权限”两者通过 SCIM 的 Group 资源与 LSE 的 SCIM 设置页联动。这一联动在源码层面也有印证在 label_studio/core/settings/base.py 中成员/项目角色的来源枚举RoleSourceEnum明确包含了scim与manual、saml、ldap、api、billing并列说明 SCIM 供给的角色在 LSE 内部是被单独记录来源provenance的便于审计与追溯角色究竟由哪种方式赋予。SCIM API 端点Label Studio 的 SCIM 集成以/scim/v2/为根路径控制并交互两类实体Users用户与Groups用户组。所有端点均使用 SCIM 2.0 标准语义。Users用户端点操作方法与路径说明搜索用户GET /scim/v2/Users?filteruserName useremail.comstartIndex1count100用户存在返回200不存在返回404获取用户GET /scim/v2/Users/useremail.com以邮箱作为用户标识创建用户POST /scim/v2/Users/需要包含用户信息的 payload例如 email 与 password搜索用户时使用 SCIM 标准的filter查询参数userName在此处即用户的邮箱地址startIndex与count用于分页控制。创建用户时请求体payload必须携带用户的邮箱等身份信息{ schemas: [urn:ietf:params:scim:schemas:core:2.0:User], userName: userexample.com, emails: [ { value: userexample.com, primary: true, type: work } ], active: true, name: { givenName: Given, familyName: Family } }注意在 SCIM 请求中 Label Studio 以email 作为用户的唯一标识字段。在 Okta 配置 SCIM 集成时“Unique Identifier Field for Users”必须选择email而不是userName否则对 SCIM 集成之前已存在的存量用户将无法正确匹配详细说明见 scim_setup。Groups用户组端点操作方法与路径说明修改组成员PUT /scim/v2/Groups/group-name用完整成员列表替换组内成员创建组POST /scim/v2/Groups/group-name在 LSE 中登记 IdP 同步过来的组获取组GET /scim/v2/Groups/group-name查询组及其成员修改组成员的请求体示例如下group-name必须与 IdP 中发送的组名完全一致{ BODY: { schemas: [urn:ietf:params:scim:schemas:core:2.0:Group], id: group-name, displayName: group-name, members: [ { value: useremail.com, display: useremail.com } ] } }PUT语义是全量替换请求体中的members数组即为该组的最终成员列表IdP 据此实现用户加入/移出组的同步。SCIM 设置 API除上述 SCIM 标准端点外Label Studio 还提供专门的 SCIM 设置管理接口用于配置“组→角色”与“组→工作区”的映射操作方法与路径获取 SCIM 设置GET /api/scim/settings更新 SCIM 设置POST /api/scim/settings这两类设置同样可以在 Label Studio 应用内完成进入Organization页面点击右上角的SCIM即可打开设置界面可视化地完成组到角色、组到工作区的映射配置详见下文“SCIM settings”一节。SCIM settings角色映射通过组映射可以为用户分配角色。配置入口有两个调用Update SCIM settings APIPOST /api/scim/settings或登录 Label Studio 进入Organization页面后点击右上角的SCIM。组织级角色Organization-level roles组织级可映射的角色包括Annotator、Reviewer、Manager或Administrator。约束规则如下每个组只能映射到一个组织级角色可以将组映射到Deactivated角色从而撤销该组所有用户的 Label Studio 访问权限——这正是 SCIM“移除用户deprovisioning”在角色层面的落点各角色的具体权限范围参见 Roles in Label Studio Enterprise。各角色在 LSE 中的权限定位摘自 admin_roles角色权限定位Owner管理组织拥有全层级完整权限不可分配每组织仅一位Administrator拥有绝大多数层级的完整权限可访问全部工作区与项目、邀请成员Manager对其创建或被添加为成员的项目、工作区拥有完整管理权限但无法访问 Organization 页面Reviewer审阅已标注任务只能查看分配了任务的项目并审阅/更新标注Annotator标注任务只能查看并标注分配了任务的项目从源码看Deactivated是组织角色枚举中的一等公民在 label_studio/core/settings/base.py 中OrganizationRoleEnum同时包含OW(Owner)、AD(Administrator)、MA(Manager)、RE(Reviewer)、AN(Annotator)、DI(Deactivated)、NO(Not Activated)、VO(View Only)等取值SCIM 供给的 Deactivated 状态即映射到该枚举。项目级角色Project-level roles若需要更细粒度的控制可以为一个组分配项目级角色。可选值AnnotatorReviewerInherit继承该组在组织级映射的角色与组织级角色不同一个组可以在多个项目上被分配多个角色。例如Group A 在 Project 1 中是 Annotator在 Project 2 中可以是 Reviewer。同样地在 scim_setup 中还可以将一个组映射到多个项目、多个角色或将多个组映射到同一个项目同一角色。需要特别注意Inherit的一个边界行为如果组继承的是Not Activated角色用户会被映射到项目但只有当该组完成同步即用户完成首次认证后才会被真正指派到项目。SCIM settings工作区Workspaces除了角色映射SCIM 还可以将用户组分配到工作区若指定名称的工作区尚不存在SCIM 会自动创建。组被分配到工作区后其成员即以工作区成员身份加入默认获得该工作区内所有项目的访问权限这些项目权限的默认值取决于组内用户的组织级角色如需覆盖默认行为可以像上文所述使用 SCIM 为组分配项目级角色进行精确控制。也就是说工作区映射解决的是“可见范围”问题组织级角色解决“默认能力”问题项目级角色则用于“按项目覆盖能力”三层映射叠加构成完整的 SCIM 授权体系。从源码看 SCIM 在 LSE 中的落地机制虽然 SCIM 服务端本身属于企业版闭源模块但开源仓库中的若干实现细节可以帮助你理解 SCIM 请求在 LSE 内部的执行路径与影响SCIM 请求的认证与会话隔离在 label_studio/core/middleware.py 的会话超时中间件中SCIM 请求会被标记为request.is_scim并从“用户活动”判定中豁免。注释明确指出“scim assign request.user implicitly, check CustomSCIMAuthCheckMiddleware”——SCIM 请求的用户身份由专用的认证检查中间件隐式指定而不是依赖浏览器会话因此 IdP 侧通过 Bearer Token 发起的定时同步不会被会话策略打断。成员创建的统一关口在 label_studio/organizations/models.py 中Organization.add_user()是“所有成员创建邀请、SCIM、SAML、LDAP、管理端”都要经过的唯一入口chokepoint并对已关闭closed的身份账户拒绝新增任何成员资格。这意味着 SCIM 供给的用户最终也落在这个统一的成员管理模型上与手动邀请的用户享受一致的组织成员语义。角色来源可追溯如前所述RoleSourceEnum 将scim列为独立来源说明系统可以区分“角色是手动、SAML、SCIM、LDAP、API 还是计费系统赋予的”便于管理员审计 SCIM 自动供给对权限体系的影响。SCIM 相关功能开关仓库的 feature_flags.json 中包含多个 SCIM 相关特性开关如fflag_scim_skip_failed_members、fflag_fix_bros_1496_scim_stale_seats等说明 SCIM 的供给行为如失败成员的跳过策略、过期席位清理受特性开关控制在升级或排查同步问题时值得关注。从工作流到落地衔接配置与角色体系要把本文的工作流真正跑起来还需要与以下文档配合使用scim_setup完整的 SCIM2 开通向导包括 Okta 的 SCIM 连接器配置base URL 指向https://LABEL_STUDIO_BASE_URL/scim/v2/、唯一标识字段必须为email、Bearer Token 认证、Microsoft Entra IDAzure AD的受支持属性映射清单与属性白名单要求以及组推送Push Groups流程auth_setupSSO 前置配置SCIM 依赖已建立的 SSO 集成access_tokensSCIM 认证所需的 Legacy token 的获取与使用说明注意 SCIM 请求头使用Bearer而非Tokenadmin_roles 与 manage_users组织级/项目级角色的权限矩阵用于设计“组→角色”映射策略admin_manage_lse用户账号管理的入口SCIM 供给的用户同样在此体系内被管理。典型落地路径先在 IdPOkta / Entra ID中完成 SCIM 应用与属性映射配置 → 用 Owner 的 Legacy token 打通/scim/v2/认证 → 在 Label Studio 的Organization SCIM页面或POST /api/scim/settings建立“组织角色映射 → 工作区映射 → 项目角色映射”三层规则 → 在 IdP 中推送组并分配用户。此后IdP 中的任何组/成员变更都会通过 SCIM 自动同步到 Label Studio Enterprise实现用户生命周期与权限的自动化治理。【免费下载链接】label-studioLabel Studio is a multi-type data labeling and annotation tool with standardized output format项目地址: https://gitcode.com/GitHub_Trending/la/label-studio创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考