Label Studio 用户注册与邀请协作:从创建账号到安全管控的完整指南
【免费下载链接】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(多类型数据标注工具)的用户管理体系展开,讲解如何创建账号、通过命令行快速初始化用户、借助组织邀请链接拉入协作者,以及如何通过环境变量将注册入口收紧为“仅限邀请”,保障数据标注团队的访问安全。读完本篇,你将掌握 Label Studio 用户从创建、登录、受邀加入,到 API 令牌获取与邀请链接重置的完整实操链路,并能结合源码理解其底层校验逻辑。
用户体系概览
Label Studio 是面向多类型数据标注与注释的工具,账号是其一切协作的起点。首次启动服务时,你会看到注册(Sign up)页面,在此创建的账号会本地存储在 Label Studio 服务器上,这些账号允许多名标注员(annotator)协作处理同一个数据标注项目。账号体系与“组织(Organization)”概念深度绑定——每个账号在创建后都会归属组织,后续的邀请、成员管理、项目共享都围绕组织展开。
需要特别注意的是,在 Label Studio 社区版(Community Edition)中,所有用户拥有相同的功能权限,并且可以看到所有项目。如果你的团队需要基于角色的访问控制(RBAC)与精细化权限管理,则需要评估升级到 Label Studio Enterprise。本指南面向社区版的本地部署场景,聚焦注册、邀请与注册入口管控三大主题。
创建账号
通过界面创建
当你第一次启动 Label Studio 后,会看到注册界面。创建账号只需两步:
- 使用你的邮箱地址和密码创建一个账号;
- 登录 Label Studio。
这个流程对应前端user/signup页面与后端 注册视图。从源码可以看到,注册页面在提交时会校验邀请令牌(token),并将新用户注册流程委托给proceed_registration完成组织归属绑定。注册表单本身由users/forms.py中的UserSignupForm和organizations/forms.py中的OrganizationSignupForm共同承担。
通过命令行创建
你还可以在启动 Label Studio 时通过命令行直接创建账号,这在自动化部署、CI 初始化和脚本化安装场景中非常实用:
label-studio start --username <username> --password <password> [--user-token <token-at-least-5-chars>]参数说明:
--username:默认用户的邮箱/用户名;--password:默认用户的密码;--user-token:可选参数,用于 API 访问的用户令牌,最短长度为 5 个字符。
这些参数在 命令行解析器 中定义,并在 服务启动逻辑 的_create_user函数中生效。从源码可以看到用户名、密码、令牌的取值优先级依次为:命令行参数 > 配置文件(config)> 环境变量。令牌的实际写入发生在_create_user末尾——只有满足len(token) > 5时才会真正更新到用户记录上,否则会打印提示信息并跳过:
if token and len(token) > 5: Token.objects.filter(key=user.auth_token.key).update(key=token) elif token: print(f"Token {token} is not applied to user {DEFAULT_USERNAME} because it's empty or len(token) < 5")创建出的用户会被自动设为is_staff = True与is_superuser = True,并加入(或创建)名为 Label Studio 的默认组织,以保证后续可以管理项目与成员。
用户令牌(User Token)的用途
用户令牌用于API 访问认证。如果你不显式指定,系统会自动为当前用户生成一个令牌。令牌可以用于:
- 通过 HTTP 请求头
Authorization: Token <your-token>调用 Label Studio 的 REST API; - SDK 与自动化脚本的身份认证;
- 集成第三方数据管道时的安全凭证。
你可以通过api/current-user/token接口获取当前用户令牌,或者通过api/current-user/reset-token接口重置令牌(相关路由定义见 users/urls.py,接口实现见 users/api.py)。在账号设置页面中,也提供了重置令牌的入口(参见 user_account.html 中调用current-user-reset-token的代码)。
邀请用户加入组织
一旦初始组织账号创建完成,你就可以开始邀请协作者。邀请机制的核心是:每个组织持有一个唯一的邀请令牌(token),注册链接中携带该令牌即可免审核注册。其实现位于 organizations/api.py:
GET /api/invite:获取当前组织的邀请链接,返回结构为invite_url = '{}?token={}'.format(reverse('user-signup'), org.token);POST /api/invite/reset-token:重置邀请令牌,旧链接立即失效,并返回新的邀请链接。
界面操作步骤
- 打开 Label Studio,点击左上角的菜单;
- 选择Organization(组织);
- 在组织页面点击Add Members(添加成员)。
此时你可以复制一个对该组织唯一的邀请链接,将其分享给团队成员,对方打开链接即可完成注册并自动加入该组织。
重置邀请链接
在组织页面点击Reset Link(重置链接)即可重置邀请令牌。重置之后:
- 任何持有旧链接的人都无法再注册新账号;
- 已注册的用户不受影响;
- 系统会生成新的链接供重新分发。
这一行为有对应的自动化测试保障,见 test_invites.py:测试先获取邀请链接并完成注册(返回 302),随后调用/api/invite/reset-token重置,再用旧链接注册时返回 403(Permission Denied),而用新链接注册则恢复正常。
安全提示:重置邀请链接是一种安全手段,但应纳入更完整的访问控制策略,其中就包括下文提到的“关闭公开注册页面”。请参见下一节“仅允许邀请注册”。
仅允许邀请注册(Require Invites)
邀请链接解决了“定向拉人”的问题,但它并不能阻止任何人在注册页面自行创建新账号。如果希望只有持有邀请链接的用户才能加入组织,必须通过环境变量收紧注册入口。
关闭注册入口的底层校验逻辑
该开关在 核心配置 中定义:
DISABLE_SIGNUP_WITHOUT_LINK = get_bool_env('DISABLE_SIGNUP_WITHOUT_LINK', False)即环境变量LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK的布尔值,默认关闭。真正执行校验的逻辑在 注册视图:
if settings.DISABLE_SIGNUP_WITHOUT_LINK is True: if not (token and organization and token == organization.token): raise PermissionDenied() else: if token and organization and token != organization.token: raise PermissionDenied()两种模式下的行为差异清晰可见:
- 开关开启:注册请求必须携带与组织令牌一致的 token,否则直接拒绝(403)。即“无链接不可注册”;
- 开关关闭:不要求 token,但若携带了错误的 token 同样会被拒绝。即“公开注册 + 校验链接有效性”。
模板层同样会根据该开关决定是否渲染注册入口,见 user_base.html 与 new-ui 登录页模板:当开关开启时,页面上不再展示“Create Account”入口,从 UI 层面配合后端双保险。
本地部署:限制注册
本地部署(Docker、裸机等)在安装 Label Studio 后执行:
export LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK=true设置后,注册页面将保持可见但无法直接提交注册,只有通过组织邀请链接访问user/signup?token=<org-token>才能完成注册。test_signup_setting测试对此有完整验证(见 test_invites.py):开关开启时,直接 POST/user/signup返回 403;通过邀请链接 POST 则返回 302(注册成功重定向)。
云部署:限制注册并初始化管理员账号
云部署(容器化、云主机)场景下,在启动 Label Studio之前设置以下环境变量:
LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK=true LABEL_STUDIO_USERNAME=<username> LABEL_STUDIO_PASSWORD=<password> # token 可选,未设置时会自动生成 LABEL_STUDIO_USER_TOKEN=<token-at-least-5-chars>设置完成后启动 Label Studio,注册入口即被关闭,你需要使用上述环境变量中设定的用户名和密码登录。这些环境变量正是_create_user中 CLI 参数的“环境变量兜底”,参见 server.py:
username = input_args.username or config.get('username') or get_env('USERNAME') password = input_args.password or config.get('password') or get_env('PASSWORD') token = input_args.user_token or config.get('user_token') or get_env('USER_TOKEN')部署要点:云部署建议在初始化阶段就设置
LABEL_STUDIO_USERNAME/LABEL_STUDIO_PASSWORD,因为关闭公开注册后,若没有预置管理员账号,你将无法从界面创建首个用户。
安全加固建议汇总
结合社区版的用户模型,推荐的安全基线如下:
- 默认关闭公开注册:生产环境一律设置
LABEL_STUDIO_DISABLE_SIGNUP_WITHOUT_LINK=true,避免陌生人涌入你的组织; - 通过邀请链接定向拉人:使用
GET /api/invite获取链接,通过安全渠道(如企业 IM、邮件)分发给协作者; - 定期重置邀请令牌:成员变动或链接泄露后,调用
POST /api/invite/reset-token或点击界面上的Reset Link,使旧链接立即失效; - 令牌最小化暴露:
--user-token/LABEL_STUDIO_USER_TOKEN用于 API 集成,注意保管,最短 5 字符,建议使用强随机字符串;必要时通过api/current-user/reset-token轮换; - 账号本地存储认知:社区版账号存储于 Label Studio 服务器本地数据库,无角色/权限隔离,多团队严格隔离需求应评估 Enterprise 方案。
相关资源
- 注册/登录/登出视图实现:label_studio/users/views.py
- 用户 API(令牌获取/重置):label_studio/users/api.py
- 用户路由定义:label_studio/users/urls.py
- 组织邀请链接 API:label_studio/organizations/api.py
- 命令行启动与用户初始化:label_studio/server.py、label_studio/core/argparser.py
- 注册开关配置项:label_studio/core/settings/base.py
- 注册与邀请的自动化测试:label_studio/tests/test_invites.py
- 注册页面模板:label_studio/users/templates/users/user_base.html
【免费下载链接】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),仅供参考