Label Studio Enterprise SSO/SAML 认证配置指南:从 IdP 接入到组映射与权限下发
【免费下载链接】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 的 SAML 单点登录(SSO)配置展开,说明如何将已有的身份提供商(Identity Provider,IdP)接入 Label Studio,实现基于组织角色的统一认证与授权管理。读完本文,你将掌握从 Label Studio 与 IdP 两侧完成 SAML 对接的完整步骤、SAML 属性与预设映射规则、三种组映射(角色/工作区/项目)的配置方法,以及通过环境变量收紧为"纯 SSO 管理"的进阶方案。
适用版本说明:SSO 认证仅在 Label Studio Enterprise Edition 中提供。若使用 Label Studio Community Edition,可参考 Label Studio 功能对比 了解两个版本的能力差异。
为什么需要 SSO/SAML
在企业环境中,用户通常已在统一的身份体系(如 Okta、Microsoft Entra ID、Google Workspace)中维护账号。通过 SAML 将 Label Studio Enterprise 配置为 Service Provider(SP),可以让用户使用企业既有账号登录标注平台,免去重复注册与密码管理。更重要的是,SSO 打通后可以结合 管理用户访问 的能力,把 SAML 中的用户组(Groups)映射到 Label Studio 的roles或workspaces,实现"身份在 IdP 维护、权限在平台自动同步"的治理模型。
支持的 Identity Provider
Label Studio Enterprise 支持以下 IdP:
- Okta
- Google SAML
- Ping Federate 与 Ping Identity SAML SSO 配置示例
- OneLogin
- Microsoft Entra ID(原 Azure Active Directory / Azure AD)
- Auth0
- 其他使用标准 SAML 断言(SAML assertions)的 IdP
配置权限说明:只有组织Owner或Administrator角色的用户才能为实例设置 SSO & SAML。
配置 SAML SSO 的完整流程
整体流程分为三步:先在 Label Studio 侧复制必要 URL,再到 IdP 侧完成应用注册与属性映射,最后返回 Label Studio 上传 IdP 元数据并配置组映射。具体细节因 IdP 而异,但通用步骤如下。
第一步:从 Label Studio 获取接入信息
- 进入Organization页面(若页面上看不到Organization选项,说明当前登录账号不具备相应角色)。
- 在页面右上角选择SSO & SAML。
- 在Organization字段中,确保域名与 IdP 中组织使用的域名一致。
- 复制以下三个 URL,供 IdP 侧配置使用:
| URL | 作用 |
|---|---|
| Assertion Consumer Service (ACS) URL(含 Audience/EntityID 与 Recipient/Reply 信息) | IdP 在认证成功后用来将用户重定向回 Label Studio |
| Login URL | 用户登录 Label Studio 时使用的入口地址 |
| Logout URL | 用户登出 Label Studio 后被重定向的地址 |
从源码结构看,Label Studio 的 SAML 服务端路由集中在/saml/<token>/命名空间下:acs(断言消费)、welcome(登录欢迎页)、denied(拒绝页)、login、logout、xml(元数据下发),相关模式定义在 middleware.py,并有对应的中间件测试覆盖(见 test_middleware.py)。这些路由即 ACS URL、Login URL、Logout URL 对应的后端处理端点。
第二步:在 IdP 侧完成应用接入与属性映射
- 将上一步从 Label Studio 复制的 URL 粘贴到 IdP 应用配置的对应位置。
- 生成 IdP 的元数据 XML 文件,或提供指定元数据的 URL(供 Label Studio 拉取)。
- 设置或确认以下 SAML 属性映射。Label Studio Enterprise 依赖这些特定属性来识别用户身份。
默认属性名:
| 数据 | 默认属性 |
|---|---|
| 邮箱地址 | Email |
| 名(given name) | FirstName |
| 姓(family name) | LastName |
| 组名 | Groups |
不同 IdP 的属性名并不统一。Label Studio 在 SSO & SAML 设置页提供了presets(预设),可一键为常见 IdP 配置正确的属性映射;若 IdP 使用其他属性名,也可手动配置自定义属性。
各 IdP 的属性预设:
| IdP | FirstName | LastName | Groups | |
|---|---|---|---|---|
| Default | Email | FirstName | LastName | Groups |
| Auth0 | email | given_name | family_name | groups |
| Entra ID (short) | emailAddress | givenName | surname | groups |
Email | FirstName | LastName | Groups | |
| PingOne | emailAddress | givenName | surname | Groups |
| Okta | email | firstName | lastName | groups |
Microsoft Entra ID 完整 URI 格式:
若 Entra ID 使用默认的 claim URI,可按下表配置:
| 属性 | URI |
|---|---|
http://schemas.xmlsoap.org/ws/2005/05/identity/claims/emailaddress | |
| FirstName | http://schemas.xmlsoap.org/ws/2005/05/identity/claims/givenname |
| LastName | http://schemas.xmlsoap.org/ws/2005/05/identity/claims/surname |
| Groups | http://schemas.microsoft.com/ws/2008/06/identity/claims/groups |
第三步:返回 Label Studio 上传元数据并配置组映射
- 回到 SSO & SAML 页面。
- 上传 IdP 的 metadata XML 文件,或指定 metadata URL。
- 配置组映射(也可稍后添加或编辑)。关键要求:填写的组名必须与 IdP 在 SAML 认证响应中作为属性发送的组名完全一致。
Label Studio Enterprise 提供三种层级的组映射:
- Organization Roles to Groups Mapping(组织角色映射):在组织级别将组映射为角色。组织级别的角色是用户的默认角色,会自动分配到工作区和项目。可配置说明见 Label Studio Enterprise 中的角色。多个组可以映射到同一角色;处于Not Activated(未激活)或Deactivated(已停用)状态的用户不计入账户的席位(seat)上限。
- Workspaces to Groups Mapping(工作区映射):将组作为成员加入工作区。Manager、Reviewer、Annotator 角色的用户只有在被加入某工作区后才能看到该工作区。可以选择已有工作区或新建工作区,多个组可以映射到同一工作区。
- Projects to Groups Mapping(项目映射):在项目级别将组映射为角色,项目级角色可为Annotator、Reviewer或Inherit。一个组可以在多个项目中映射为不同角色,多个组也可以映射到同一项目和同一角色。若选择Inherit,该组将继承上文Organization Roles to Groups Mapping中设置的角色;若继承的是 Not Activated 角色,用户虽被映射到项目,但只有在组被同步(即用户通过 SSO 完成认证)后才会真正被分配到项目。
- 点击Save保存配置。
- 使用 SSO 账号登录 Label Studio Enterprise 验证配置是否生效。
仅使用 SSO 管理用户访问
如果希望完全通过单点登录来管理 Label Studio 的角色与工作区,可在环境变量文件中加入以下配置:
MANUAL_PROJECT_MEMBER_MANAGEMENT=0 MANUAL_WORKSPACE_MANAGEMENT=0 MANUAL_ROLE_MANAGEMENT=0设置这些选项后,Label Studio 的 API 与 UI 中针对具体用户的角色、工作区分配功能将被禁用,权限完全依赖环境变量文件中的配置(即 IdP 侧下发的组与上述组映射规则)。这也是 LDAP 场景下的同一套管理开关,相关说明可见 LDAP 认证配置。
从发布历史可以佐证这些变量的实际行为:2.3.1 版本的更新说明中提到,MANUAL_WORKSPACE_MANAGEMENT设为 false 时曾出现"用户登录时 SAML 工作区被重置"的问题并已修复(见 2.3.1 发布说明),说明该变量直接影响 SAML 登录时工作区成员关系的同步逻辑。
补充说明:
- 若使用 Label Studio Enterprise Cloud(SaaS 版)并希望为组织启用上述限制,需提交工单申请;如有需要,也可申请禁用通用登录(common login)选项——禁用后用户只能使用 SSO 登录字段,通用登录入口被彻底关闭。
- SSO 配置完成后,用户仍可通过原生认证(普通登录)访问 Label Studio UI,但官方不推荐这样做,尤其对 Owner 角色用户而言。
- 可通过
DISABLE_SIGNUP_WITHOUT_LINK选项阻止用户自行创建组织。该选项在 用户管理文档 中有详细说明:设置LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK=true后,用户只能通过邀请链接或邮件注册,无法通过/user/signup页面自行创建账号。对应源码实现位于 base.py(环境变量解析,默认False)与 users/views.py(注册时校验组织 token)。
自定义登录页 URL
可设置LOGIN_PAGE_URL环境变量,将登录页重定向到指定 URL。该变量适合启用白标(white labeling)的组织,或存在多个内部团队、不同团队使用不同 IdP 登录(或部分团队不使用 IdP)的场景,参见 2.21.0 发布说明。
从源码看 SAML 在 Label Studio 中的定位
在 Django 配置中,SAML 是角色来源(Role Source)之一。源码中定义了角色来源枚举(见 base.py),包括manual(手动)、saml、scim、ldap、api、billing等来源,这意味着用户角色可被标记为"由 SAML 下发",与手动分配、SCIM、LDAP 等方式并行管理、互不冲突。结合上文的环境变量开关,可以推断:当MANUAL_ROLE_MANAGEMENT=0时,平台屏蔽手动/API 层面的角色分配入口,角色只能源自 SAML 等外部身份同步通道。
配置要点与注意事项汇总
- 组名必须与 IdP 实际下发的
Groups属性值完全一致,否则映射不生效。 - 组织域名需与 IdP 中的组织域名保持一致。
- 属性名与 IdP 不一致时优先使用页面预设,其次手动配置自定义属性名;Entra ID 需注意短格式与完整 URI 格式的区别。
- 未激活/已停用用户不计席位;继承 Not Activated 角色的组需在用户完成 SSO 认证(组同步)后才真正进入项目。
- SSO 与普通登录可以并存,但出于安全考虑官方不推荐;可通过
LOGIN_PAGE_URL与禁用 common login 进一步收口登录入口。
【免费下载链接】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),仅供参考