ToolJet 使用 Okta 作为 OIDC 身份提供商的 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
本文以 ToolJet 官方文档Okta指南为主体,完整讲解如何把 Okta 配置为 ToolJet 的 OIDC 身份提供商(Identity Provider):从 Okta Developer Console 中创建应用集成、生成 Client ID / Client Secret、获取 Well-Known URL,到在 ToolJet 实例/工作区设置中启用并保存 OIDC 登录配置。结合 ToolJet 服务端源码,文章还会深入解析 OIDC 配置在数据库中的存储结构(sso_configs表)与登录回调处理链路,帮助读者不仅"会配",还能理解其背后的实现机制。
一、Okta 在 ToolJet 中的角色:OIDC 身份提供商
OpenID Connect(OIDC)是一种在 OAuth 2.0 之上构建的认证协议,应用可以借助受信任的身份提供商来安全地验证用户身份。ToolJet 允许把 Okta、Azure AD、Google 等作为 OIDC 身份提供商接入(对应 OpenID Connect 总配置指南),用户在登录 ToolJet 时会被重定向到 Okta 完成认证,认证结果再回传给 ToolJet 换取会话。
从源码结构看,ToolJet 后端的 SSO 体系以统一实体建模:SSOConfigs 实体 定义了SSOType枚举(google、git、form、openid、ldap、saml),Okta 走的就是其中的OPENID = 'openid'分支;同时通过ConfigScope(instance/organization)区分 SSO 配置是实例级还是工作区(组织)级,这与文档中"Instance Level / Workspace Level"两种配置入口完全对应。
需要注意的适用前提:OIDC SSO 在 ToolJet 中标注为付费功能(setup.md 开头带有 "Paid feature" 徽标),且不同层级配置需要对应权限:
| 配置层级 | 所需角色 | 入口路径 |
|---|---|---|
| 实例级(Instance Level) | Super Admin | 设置 > Instance login(示例 URL:https://app.corp.com/instance-settings/instance-login) |
| 工作区级(Workspace Level) | Admin | 工作区设置 > Workspace login(示例 URL:https://app.corp.com/nexus/workspace-settings/workspace-login) |
二、在 Okta Developer Console 中生成 Client ID 与 Client Secret
这是本指南的主体操作流程,全程在 Okta Developer Console 中完成:
登录 Okta Developer Console。
进入Applications区域,点击Create App Integration。
在创建表单中,选择OIDC - OpenID Connect作为Sign-in method,选择Web Application作为Application type,然后点击Next按钮。
填写App integration name,并将Sign-in redirect URIs设置为 ToolJet 提供的 Redirect URL(如何从 ToolJet 获取见第三节第 4 步)。
点击创建,完成应用创建。
复制生成的客户端凭证(Client Credential),稍后在 ToolJet 中配置。
依据 Okta 官方 Auth Servers 文档说明,找到自己的Well-Known URL(组织级授权服务器的
/.well-known/openid-configuration端点)。该 URL 是 OIDC 发现(Discovery)机制的入口,ToolJet 会用它自动拉取 token 端点、jwks 端点等配置信息。
操作完成后,你手上应有三样东西:Client ID、Client Secret和Well-Known URL——它们正是 ToolJet OIDC 配置弹窗中要求的三个核心参数。
三、在 ToolJet 中启用并保存 OIDC 配置
拿到凭证后,按 OpenID Connect Setup 的步骤在 ToolJet 中落地:
- 点击 ToolJet 页面左下角的设置图标(⚙️)。
- 根据目标层级进入对应入口:
- 实例级:Settings > Instance login;
- 工作区级:Workspace Settings > Workspace login。
- 页面右侧有一组按客户端划分的 SSO 开关(默认全部关闭),打开OpenID Connect对应的开关。
- 开关打开后会弹出一个配置弹窗,包含Name、Client ID、Client secret、Well known URL等输入项;弹窗左上角有一个启用开关,先打开它,然后不填写任何参数直接点击 Save changes。这一步会先生成 ToolJet 侧的Redirect URL——你正是把它填入上一步 Okta 的 Sign-in redirect URIs 中,形成"先要 URL、再生成凭证"的闭环。
- 回到弹窗,把 Okta 的Client ID、Client Secret、Well Known URL逐一填入并再次点击Save changes。
保存成功后,OIDC SSO 即启用,用户即可通过 Okta 完成 ToolJet 登录。
四、源码级解析:OIDC 配置如何存储与生效
4.1 配置结构:OpenId 类型字段全集
SSOConfigs 实体 中定义了OpenId配置类型,除文档中出现的三个必填项外,还包含若干进阶字段,完整清单如下:
| 字段 | 说明 | 对应文档操作 |
|---|---|---|
clientId | Okta 应用生成的 Client ID | 第二节第 6 步复制的凭证 |
clientSecret | Okta 应用生成的 Client Secret | 同上 |
name | 该 SSO 配置的展示名称 | 弹窗中的 Name 字段 |
wellKnownUrl | Okta 授权服务器的 Well-Known 发现端点 | 第二节第 7 步获取 |
customScopes | 自定义的 OAuth 作用域 | 进阶配置,默认留空即可 |
claimName/groupMapping/enableGroupSync | 用于 OIDC 组同步:指定 IdP 返回的组 claim 及到 ToolJet 用户组的映射(参见 OIDC 组同步文档) | 进阶功能,非登录必需 |
enableShortSession | 短会话开关 | 进阶配置 |
这些字段以 JSON 形式持久化在sso_configs表的configs列中(见 sso_config.entity.ts),并通过enabled布尔列控制开关状态;configScope列则区分instance与organization两个作用域,与前端两级设置入口一一对应。实例级 SSO 能力由数据迁移 1706024347284-AddInstanceLevelSSOInSSOConfigs.ts 引入。
4.2 登录链路:从回调到会话
用户经 Okta 认证成功后,ToolJet 收到回调并进入 OAuth 统一登录服务 OauthService.signIn,其处理逻辑包括:
- 配置定位:优先按
configId取工作区级配置;否则按 SSO 类型分别查询实例级配置(getInstanceSSOConfigsOfType)或组织级配置; - 用户校验与开通:校验 IdP 返回的用户是否具备有效的
userSSOId与email,再通过isValidDomain(userResponse.email, domain)做邮箱域名白名单校验; - 自动建号与角色授予:若该用户不存在且组织开启了注册(
enableSignUp),系统会自动创建用户、初始化其个人工作区,并把该用户挂到ADMIN用户组,随后生成登录会话载荷(generateLoginResultPayload)完成登录; - 邀请流程衔接:如果用户是通过邀请链接进入的,还会走邀请激活分支(
processOrganizationSignup),把 SSO 身份与组织邀请绑定。
具体到 OIDC 协议交互(用 code 换 token、校验 JWT 等),由 OidcOAuthService 抽象承接,其接口约定了signIn(code 换用户信息)与getConfigs(生成授权 URL 并处理 PKCE code verifier)两个核心方法。从开源仓库的源码结构看,该文件当前是接口骨架(方法抛出未实现错误),完整的协议实现随企业版(EE)模块提供,这也与文档将其标记为付费功能相印证。
五、配置核对清单
上线前建议按以下清单逐项核对:
- Okta 应用类型为Web Application + OIDC,Sign-in method 为 OIDC;
- Okta 的Sign-in redirect URIs与 ToolJet 弹窗首次保存生成的Redirect URL完全一致(协议与主机需严格匹配);
- ToolJet 中Client ID / Client Secret / Well Known URL三项均已填写且开关处于启用状态;
- 权限达标:实例级配置者为 Super Admin,工作区级配置者为 Admin;
- 若组织开启了域名限制,确认 Okta 侧用户邮箱域名在允许范围内,否则登录会被"Domain verification failed"拦截(见 OauthService.signIn 中的校验逻辑)。
按以上流程完成配置后,ToolJet 的登录页将支持通过 Okta 进行 OpenID Connect 单点登录;如需进一步用 Okta 的组属性自动同步 ToolJet 用户组,可继续参考 OIDC 组同步文档 中claimName与groupMapping的用法。
【免费下载链接】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),仅供参考