news 2026/9/12 9:26:37

ToolJet SSO 通用设置(General Settings)配置指南:启用注册、允许域名与登录 URL

作者头像

张小明

前端开发工程师

1.2k 24
文章封面图
ToolJet SSO 通用设置(General Settings)配置指南:启用注册、允许域名与登录 URL

ToolJet SSO 通用设置(General Settings)配置指南:启用注册、允许域名与登录 URL

【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 🚀项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet

本文以 ToolJet 2.50.0-LTS 版本为背景,系统讲解工作区 SSO(Single Sign-On)中的General Settings(通用设置):包括Enable signup(启用注册)、Allowed domains(允许的域名)与Login URL(登录 URL)三个核心配置项的作用、操作路径、底层实现原理与注意事项。阅读完本文,你将能够独立完成 ToolJet 工作区 SSO 通用策略的配置,理解这些设置如何影响用户注册、域名校验与直达登录流程,并能在源码层面印证其行为。

进入 General Settings 的操作路径

在 ToolJet 控制台中,SSO 通用设置位于工作区级别的管理界面,操作步骤如下:

  1. 在 ToolJet 仪表盘左侧边栏点击Workspace Settings(⚙️)
  2. 在设置页侧边栏中选择SSO
  3. 在 SSO 页面中点击General Settings选项卡,即可看到本节将要介绍的三个配置项。

对应前端实现位于 WorkspaceLoginSettings.jsx,其中 General Settings 表单包含了允许域名输入框、登录 URL 展示框以及注册开关等控件。

启用注册(Enable Signup)

配置作用

Enable signup开关决定了用户首次通过 SSO 登录时是否自动创建新账户

  • 开启:用户使用 SSO 首次登录时,系统会自动为其创建新账户(自动注册);
  • 关闭:只有已存在于工作区中的存量用户才能通过 SSO 登录,新邮箱地址将被拒绝。

这一开关直接控制 SSO 登录链路中的「自动开通账号」行为,是控制工作区成员准入的第一道闸门。

底层实现

从源码看,ENABLE_SIGNUP是实例级系统设置(Instance System Setting)之一,定义在 instance-settings 常量:

export enum INSTANCE_SYSTEM_SETTINGS { ... ENABLE_SIGNUP = 'ENABLE_SIGNUP', ALLOWED_DOMAINS = 'ALLOWED_DOMAINS', ... }

其默认值由环境变量DISABLE_SIGNUPS决定(见同文件的getDefaultInstanceSettings()):

[INSTANCE_SYSTEM_SETTINGS.ENABLE_SIGNUP]: process.env.DISABLE_SIGNUPS === 'false' ? 'true' : 'false',

即:当环境变量DISABLE_SIGNUPS未设置或不为false时,默认值为'false'(关闭注册);只有显式设置DISABLE_SIGNUPS=false才默认开启注册。

在 SSO 登录流程中,该配置通过getInstanceSSOConfigsOfType被读取并转换为布尔值,注入到 SSO 配置对象中(见 auth/util.service.ts):

const instanceSettings = await this.instanceSettingsUtilService.getSettings([ INSTANCE_SYSTEM_SETTINGS.ALLOWED_DOMAINS, INSTANCE_SYSTEM_SETTINGS.ENABLE_SIGNUP, ]); return { organization: { enableSignUp: instanceSettings?.ENABLE_SIGNUP === 'true', domain: instanceSettings?.ALLOWED_DOMAINS, }, ... };

而 OAuth 登录编排服务(oauth/service.ts)在解析配置后,依据enableSignUp决定新建用户还是仅允许存量用户登录:

const enableSignUp = typeof organization?.id === 'undefined' ? true : !!organization.enableSignUp;

这里organization.id未定义(即实例级 SSO 配置场景)时默认允许注册,否则严格遵循配置开关。

配置与运维要点

  • 若希望实例默认关闭注册,保持DISABLE_SIGNUPS不设置或设置为true即可;若希望默认开启,需设置DISABLE_SIGNUPS=false并重启服务使环境变量生效。
  • 该配置通过实例设置接口下发到前端(见 configs/service.ts 的public_config,其中fetchDefaultInstanceConfig()返回的实例配置列表包含ENABLE_SIGNUP),因此修改后需同步刷新前端配置。

允许的域名(Allowed Domains)

配置作用

Allowed domains用于对 SSO 登录用户的邮箱域名进行白名单限制:

  • 可以添加多个域名,以英文逗号分隔,例如:tooljet.com,tooljet.io,yourorganization.com
  • 默认允许所有域名(即该字段留空时不设限制);
  • 当配置了域名白名单后,邮箱后缀不在名单内的用户将无法通过 SSO 登录。

前端输入框的辅助文案也明确说明了这一格式(见 WorkspaceLoginSettings.jsx):

Support multiple domains. Enter domain names separated by comma. example: tooljet.com,tooljet.io,yourorganization.com

底层实现

域名校验的核心函数为isValidDomain,实现在 server/src/helpers/utils.helper.ts:

export const isValidDomain = (email: string, restrictedDomain: string): boolean => { if (!email) return false; const domain = email.substring(email.lastIndexOf('@') + 1); if (!restrictedDomain) return true; // 未配置域名时放行所有域名 if (!domain) return false; if ( !restrictedDomain .split(',') // 按逗号拆分 .map((e) => e && e.trim()) // 去除首尾空格 .filter((e) => !!e) // 过滤空项 .includes(domain) // 精确匹配邮箱域名 ) { return false; } return true; };

该函数体现了两条关键行为:

  1. 逗号分隔 + 空白容忍:多个域名用逗号分隔,每个域名会经过trim()处理,因此tooljet.com, tooljet.io(含空格)也能正确解析;
  2. 留空即放行restrictedDomain为空时直接返回true,与文档中「默认允许所有域名」的描述一致。

在 OAuth 登录流程中(oauth/service.ts),SSO 响应解析后立即执行域名校验:

const domain = organization?.domain; ... if (!isValidDomain(userResponse.email, domain)) { throw new UnauthorizedException(`You cannot sign in using the mail id - Domain verification failed`); }

即邮箱域名不在白名单内时,登录直接失败并返回「Domain verification failed」错误。

数据校验与层级

  • 配置接口对domain字段做了长度限制与输入清洗(见 login-configs/dto/index.ts):@MaxLength(250),即域名列表总长度不能超过 250 个字符,且会经过sanitizeInput消毒;
  • 在 EE 版本中还提供isValidSSODomain做组织级与实例级的层级校验(组织配置优先于实例配置),CE 版本则始终返回true(不限制)。注意:该层级校验仅适用于 EE(企业版),社区版(CE)不做 SSO 域名限制。

登录 URL(Login URL)

配置作用

Login URL是当前工作区的直达登录链接,团队成员可以直接使用该 URL 登录到指定工作区,而无需先经过工作区选择页面。

  • 该 URL 形如https://<你的ToolJet域名>/login/<workspace-slug 或 workspace-id>
  • 当 Multi-Workspace(多工作区)被禁用时,该字段会隐藏——因为单工作区场景下不存在「选择工作区」的问题;
  • URL 右侧提供复制按钮,可一键复制分享给团队成员。

底层实现

前端根据当前登录会话信息动态拼接登录 URL(见 WorkspaceLoginSettings.jsx):

{`${getHostURL()}/login/${ authenticationService?.currentSessionValue?.current_organization_slug || authenticationService?.currentSessionValue?.current_organization_id }`}

可以看到 URL 的路径段优先使用工作区 slugcurrent_organization_slug),不存在时回退到工作区 IDcurrent_organization_id)。因此,若工作区配置了自定义 slug,登录 URL 会更加可读、便于记忆和分享。

同时前端还会调用copyFunction('login-url')实现一键复制,方便管理员将链接分发给成员。

使用建议

  • 将登录 URL 与 SSO(如 Google OAuth、GitHub OAuth)配合使用,可以实现「打开链接 → 直接进入工作区 SSO 登录」的最短路径;
  • 由于 URL 依赖 slug/ID,若工作区被重命名或 slug 变更,需要以界面展示的最新 URL 为准;
  • 在禁用了 Multi-Workspace 的部署中,该字段自动隐藏,管理员无需也无法配置。

三个配置项与 SSO 登录链路的整体关系

将上述三个配置项串联起来,SSO 登录的完整链路为:

  1. 用户访问工作区登录 URL(或通用登录页);
  2. 服务端读取实例/工作区 SSO 配置(含ENABLE_SIGNUPALLOWED_DOMAINS);
  3. 用户通过 IdP(如 Google)完成身份认证后回调 ToolJet;
  4. ToolJet 解析 IdP 返回的用户邮箱,先执行域名白名单校验isValidDomain/isValidSSODomain),不通过则拒绝登录;
  5. 通过校验后,依据enableSignUp判断:允许注册则自动创建账户并关联到工作区,否则仅放行存量用户;
  6. 用户进入工作区。

这一流程在 oauth/service.ts 中按序实现:先取配置(含domainenableSignUp),再做域名校验,最后走「创建或复用用户」的findOrCreateUser逻辑(见 auth/util.service.ts)。

常见问题与排查建议

现象可能原因排查方向
首次 SSO 登录提示无法登录Enable signup已关闭,且该用户未预先加入工作区在工作区成员管理中先添加该用户,或临时开启注册开关
登录报「Domain verification failed」邮箱域名不在Allowed domains白名单内检查白名单格式(逗号分隔、无多余空格)、总长度是否超过 250 字符
找不到 Login URL 字段Multi-Workspace 被禁用单工作区部署下该字段按设计隐藏,无需配置
环境变量修改后行为未变化服务未重启或前端配置未刷新修改DISABLE_SIGNUPS后需重启服务,并确认public_config已返回最新值

以上排查项均可在 configs/service.ts、oauth/service.ts 与 utils.helper.ts 中找到对应的实现依据。若需要进一步了解 Google/GitHub 等具体 SSO 提供方的配置,可参阅同目录下的对应文档(如 Google SSO 与 GitHub SSO)。

【免费下载链接】ToolJetOpen-source foundation of ToolJet AI - the enterprise app generation platform for internal tools, dashboards, business applications, workflows and AI agents. Build visually, from a prompt, or from Claude Code, Codex and Cursor over MCP 🚀项目地址: https://gitcode.com/GitHub_Trending/to/ToolJet

创作声明:本文部分内容由AI辅助生成(AIGC),仅供参考

版权声明: 本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若内容造成侵权/违法违规/事实不符,请联系邮箱:809451989@qq.com进行投诉反馈,一经查实,立即删除!
网站建设 2026/9/12 9:26:31

LunaTranslator 新手指南:5分钟跑通日文游戏实时翻译

LunaTranslator 新手指南&#xff1a;5分钟跑通日文游戏实时翻译 【免费下载链接】LunaTranslator 视觉小说翻译器 / Visual Novel Translator 项目地址: https://gitcode.com/GitHub_Trending/lu/LunaTranslator LunaTranslator 是一款 Windows 上的视觉小说实时翻译工…

作者头像 李华
网站建设 2026/9/12 9:26:23

RAG端到端信息流设计:政务场景下的切块、Embedding与多路召回实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 9:26:20

LLC电源调试:欠谐振与过谐振的波形判断与ZVS实现

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 9:25:44

Crayfish容器版:桌面智能体的可编程服务总线实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华
网站建设 2026/9/12 9:24:45

openPangu-2.0-Pro:昇腾原生大模型的工业级落地实践

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

作者头像 李华