前,Apache DolphinScheduler 提供了几种登录方式,像密码登录、LDAP,还有 Casdoor SSO。但这些方法都有短板,比如说过度依赖 Casdoor 项目,或者 OAuth 的实现不够灵活,跟各种企业身份系统集成的时候特别麻烦。
作为我 2025 年谷歌暑期代码计划(Google Summer of Code)的项目成果,我很高兴给大家介绍一个解决方案:全新的通用 OpenID Connect(OIDC)认证机制。它简化并升级了访问 DolphinScheduler 的方式,让 DolphinScheduler 真正契合企业需求。这个实现巧妙地运用了现有的 Nimbus SDK,还精心设计成能与当前数据库架构无缝衔接,保证所有用户都能轻松完成升级。
1d7f44f5-cbd4-44f5-abf9-fc2a26f69802
认证架构前后对比
🤔 什么是 OIDC?打个比方
不妨把 OIDC 想象成通用的数字护照。就好比你不用为每个要用的服务(比如 DolphinScheduler)单独创建账户,只要拿出身份提供商(像谷歌、Keycloak,或者公司内部的登录系统)给的可信护照,就能证明自己的身份。
从技术角度讲,OIDC 是现代安全标准,在 OAuth 2.0 协议基础上构建了身份验证层。OAuth 2.0 解决的是授权问题(你能做什么),而 OIDC 解决的是身份验证问题(你是谁)。
这个机制对 Apache DolphinScheduler 来说特别合适,原因如下:
通用性强 🌐:它能跟各种合规的身份提供商配合,像 Keycloak、Okta、Azure AD、Dexidp,甚至飞书和企业微信这类社交/企业登录方式都能用。
安全性高 🛡️:它用数字签名的 ID 令牌(JWT)来保证用户身份真实有效,没被篡改过。
灵活度高 🔌:即插即用,企业能轻松把 Apache DolphinScheduler 接入现有的身份基础设施。
01efc6fe-a859-4cb0-bf8b-44e0243786d7
OIDC 数字护照
✨ DolphinScheduler 中 OIDC 的关键特性
我做的这个谷歌暑期代码计划项目给 DolphinScheduler 带来了好几个超实用的企业级特性。
真正的单点登录(SSO):用户现在只要用主身份提供商登录一次,就能直接访问 DolphinScheduler,不用再记另外的密码,使用起来超级方便。
集中式身份管理:在企业环境里,管理员能在 Keycloak 或者 Okta 这样的中央身份提供商(IdP)里统一管理所有用户的访问权限。员工入职或者离职的时候,在一处就能给他们开通或者取消 Apache DolphinScheduler 的访问权限,既提升了安全性,又简化了用户生命周期管理。
自动用户配置与动态角色同步:用户第一次通过 OIDC 登录的时候,Apache DolphinScheduler 会自动创建他们的账户。通过映射身份提供商里的组声明(比如 Keycloak 里的 “dolphinscheduler - admins” 组),就能自动给用户分配管理员权限,新用户上手特别快。而且每次登录都会重新检查角色同步,保证身份提供商始终是权限的唯一权威来源。也就是说,在中央 IdP 里更新角色(升职、降职或者撤销权限),用户下次登录就自动生效。
ID 令牌增强安全性:OIDC 提供一种安全的 JSON Web 令牌(JWT),叫 ID 令牌。这个令牌由 IdP 数字签名,从加密层面保证用户身份真实可靠。DolphinScheduler 每次登录都验证这个令牌,只有认证通过的用户才能访问。
广泛兼容各类 OIDC 提供商:这个项目最大的优势就是通用性。只要遵循 OIDC 标准,Apache DolphinScheduler 就不局限于特定的提供商,能跟一大波身份解决方案兼容,包括但不限于:
开源 IdP:Keycloak、Dexidp
商业 IdP:Okta、Auth0、Microsoft Entra ID(Azure AD)
云原生代理:OAuthProxy
企业与社交登录:飞书、企业微信登录
工作原理:深入剖析
OIDC 集成采用标准的授权码流程,保证身份验证又安全又靠谱。
2a8e4291-503a-4ded-85ce-e28e279f1403
使用 OIDC 的 DolphinScheduler 简化登录流程图
🛠️ 分步指南:如何用 Keycloak 配置 OIDC
配置 OIDC 很简单。下面是用 Keycloak 和 Dex Idp 的快速指南。
示例 1:使用 Keycloak
下面是用流行的开源身份提供商 Keycloak 的快速指南。
步骤 1:配置身份提供商(Keycloak)
在 Keycloak 实例里,得把 DolphinScheduler 注册成新客户端。
创建客户端:给它起个客户端 ID(比如 dolphinscheduler - client)。
c2b90eb9-084c-4030-a359-ea1b76a0b2bd
设置重定向 URI:这一步很关键。要加上 DolphinScheduler API 服务器的回调 URL,格式是 http://{api - host:port}/dolphinscheduler/login/oauth2/code/{provider - id}。要是本地搭建的环境,就是 http://localhost:12345/dolphinscheduler/login/oauth2/code/keycloak。
c3432074-8659-440b-975c-f37b7091bde0
获取凭证:到 “Credentials” 标签页,复制客户端密钥。
edac7733-d60f-4b34-92c2-f95e9f73be3e
💡 快速上手
要是想测试,可以用 dolphinscheduler - api - test/dolphinscheduler - api - test - case/src/test/resources/docker/oidc - login/realm - export.json 这个预配置好的文件,一键启动 Keycloak 实例,所有必要设置都已经弄好了!
步骤 2:配置 DolphinScheduler
接下来,用 Keycloak 的凭证更新 dolphinscheduler - api/src/main/resources/application.yaml 文件。
f3b979e9-a15f-42fd-8681-6e69be71174d
示例 2:使用 Dexidp(展示通用性)
下面看看怎么配置 Dex,另一个很火的 OIDC 身份提供商,感受一下这个系统的灵活性。
步骤 1:配置 Dex
在 Dex 配置文件里,把 DolphinScheduler 加到 staticClients 列表里。
示例 Dex 配置文件 config.yaml:
4fce96e1-4c6c-4173-8c27-dbeb07761b0a
步骤 2:配置 DolphinScheduler
在 application.yaml 里加一个新的提供商条目。
步骤 3:登录!
重启 DolphinScheduler API 服务器之后,登录页面就会出现 “Login with Keycloak” 和 “Login with Dex” 按钮。
7ff2952e-28bc-4e9a-b494-962b0e2be951
开启 OIDC 的 DolphinScheduler 登录页面
两种方式的用户流程都很顺畅: