今年的 GSoC 已近尾声,在这场代码开发盛宴中,Apache 的开发者们积极参与,取得了一项对用户意义重大的成果——引入通用 OIDC 认证,实现无缝安全访问。令人欣喜的是,该成果出自一位印度开发者之手。在项目导师 Gallardot 与向梓豪(SbloodyS)的精心指导下,这一成果成功在 Apache DolphinScheduler 中落地。今天,就让我们一同深入了解通用 OIDC 认证的开发历程,以及它将给用户带来哪些积极影响。在大型企业里,管理用户身份始终是个难题,得在安全与用户便捷之间找到平衡。对于像 Apache DolphinScheduler 这样的企业级工作流编排平台,强大且灵活的认证机制可不是锦上添花,而是刚需。
以前,Apache DolphinScheduler 提供了几种登录方式,像密码登录、LDAP,还有 Casdoor SSO。但这些方法都有短板,比如说过度依赖 Casdoor 项目,或者 OAuth 的实现不够灵活,跟各种企业身份系统集成的时候特别麻烦。
作为我 2025 年谷歌暑期代码计划(Google Summer of Code)的项目成果,我很高兴给大家介绍一个解决方案:全新的通用 OpenID Connect(OIDC)认证机制。它简化并升级了访问 DolphinScheduler 的方式,让 DolphinScheduler 真正契合企业需求。这个实现巧妙地运用了现有的 Nimbus SDK,还精心设计成能与当前数据库架构无缝衔接,保证所有用户都能轻松完成升级。

认证架构前后对比不妨把 OIDC 想象成通用的数字护照。就好比你不用为每个要用的服务(比如 DolphinScheduler)单独创建账户,只要拿出身份提供商(像谷歌、Keycloak,或者公司内部的登录系统)给的可信护照,就能证明自己的身份。
从技术角度讲,OIDC 是现代安全标准,在 OAuth 2.0 协议基础上构建了身份验证层。OAuth 2.0 解决的是授权问题(你能做什么),而 OIDC 解决的是身份验证问题(你是谁)。
这个机制对 Apache DolphinScheduler 来说特别合适,原因如下:
- 通用性强: 它能跟各种合规的身份提供商配合,像 Keycloak、Okta、Azure AD、Dexidp,甚至飞书和企业微信这类社交/企业登录方式都能用。
- 安全性高:️ 它用数字签名的 ID 令牌(JWT)来保证用户身份真实有效,没被篡改过。
- 灵活度高: 即插即用,企业能轻松把 Apache DolphinScheduler 接入现有的身份基础设施。

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:Okta、Auth0、Microsoft Entra ID(Azure AD)
OIDC 集成采用标准的授权码流程,保证身份验证又安全又靠谱。

使用OIDC的DolphinScheduler简化登录流程图
️ 分步指南:如何用 Keycloak 配置 OIDC
配置 OIDC 很简单。下面是用 Keycloak 和 Dex Idp 的快速指南。
示例 1:使用 Keycloak
下面是用流行的开源身份提供商 Keycloak 的快速指南。
- 步骤 1:配置身份提供商(Keycloak)
在 Keycloak 实例里,得把 DolphinScheduler 注册成新客户端。
- 创建客户端:给它起个客户端 ID(比如 dolphinscheduler - client)
- 设置重定向 URI:这一步很关键。要加上 DolphinScheduler API 服务器的回调 URL,格式是
http://{api - host:port}/dolphinscheduler/login/oauth2/code/{provider - id}。要是本地搭建的环境,就是 http://localhost:12345/dolphinscheduler/login/oauth2/code/keycloak。
- 获取凭证:到 “Credentials” 标签页,复制客户端密钥。
快速上手
要是想测试,可以用 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 文件。
示例 2:使用 Dexidp(展示通用性)
下面看看怎么配置 Dex,另一个很火的 OIDC 身份提供商,感受一下这个系统的灵活性。
在 Dex 配置文件里,把 DolphinScheduler 加到 staticClients 列表里。示例 Dex 配置文件 config.yaml:

开启 OIDC 的 DolphinScheduler 登录页面
两种方式的用户流程都很顺畅:
- 跳转到 Keycloak / Dex 登录页面,输入凭证。
- 登录成功后,回到 DolphinScheduler 用户界面,完成认证。
这个项目让我学到了超多,核心目标只有一个:为企业打造一个真正通用的认证解决方案。
我先深入研究了 Apache DolphinScheduler 的架构,还搞定了本地环境搭建。在导师们的悉心指导下,我采用后端优先的方法,借助强大的 Nimbus SDK 打下坚实基础,保证 OIDC 核心逻辑既可靠又符合标准。
一个关键设计决策是把身份提供商设为唯一的权限数据源。这对实现动态角色同步功能至关重要,每次登录都重新评估用户权限,不只是第一次登录,这样就能保证访问控制始终是最新的。这就需要更新核心用户服务,保证用户权限始终跟中央身份系统一致。
验证这个特性的灵活性和可靠性是下一个大挑战。质量保证是重中之重,我用了一套多层策略来解决:
- 单元测试:我写了一套全面的单元测试,克服了复杂的模拟场景,验证了每个组件,新代码的测试覆盖率达到了 93.2%。我还趁机提高了一些现有用户管理组件的测试覆盖率。
- 端到端 API 测试:我用 Testcontainers 搭建了一套完整的 API 测试套件,它能启动一个完整的 Docker 环境(包括 Keycloak 实例),自动验证整个认证流程。
- 跨提供商验证:为了确保 “通用” 不是说说而已,我成功在Keycloak 和 Dex上测试了这个实现,证明它不依赖特定厂商。
后端工作做完后,我还开发了完整的前端体验,实现了 API 调用,创建了响应式 UI 组件,让用户能用配置好的 OIDC 提供商登录。
最后,为了方便未来开发和社区推广,我写了详细的文档。包括用 Keycloak 进行本地测试的分步开发指南,还有企业集成的详细配置示例,这些现在都已经是官方 DolphinScheduler 文档的一部分了。
这个项目能成功,多亏了我的超棒的导师 Gallardot 和 向梓豪(SbloodyS),整个夏天他们给了我特别多宝贵的指导、反馈和支持。我也特别感谢 Apache DolphinScheduler 社区和谷歌暑期代码计划给我这个难得的机会。
通用 OIDC 认证的引入对 Apache DolphinScheduler 来说是一大进步,给各方都带来了实实在在的好处:
- 对管理员:用户管理更简单,访问控制集中化,安全态势提升。
- 对用户:登录体验又顺畅又安全,要记的密码变少了。
- 对企业:能轻松把 DolphinScheduler 集成到现有的和未来的企业身份生态系统里。
这个特性让 Apache DolphinScheduler 更安全、更易用,更能应对现代数据平台的复杂需求。我鼓励大家去体验新的 OIDC 认证特性!所有工作都是公开进行的,大家可以在官方拉取请求里查看完整实现。
- 主要拉取请求:GitHub 上的 #17340(https://github.com/apache/dolphinscheduler/pull/17340)
- 谷歌暑期代码计划项目存档:https://summerofcode.withgoogle.com/programs/2025/projects/RoNSW60Q
- 官方文档:[认证指南](https://dolphinscheduler.apache.org/en - us/docs/latest/guide/security/authentication - type.html%2523oidc - openid - connect)
- GitHub:@tusaryan(https://github.com/tusaryan)
- 领英:Aryan Kumar(https://www.linkedin.com/in/tusaryan/)
欢迎大家提出反馈,踊跃贡献!感谢大家一同参与这段旅程。
- GitHub: https://github.com/apache/dolphinscheduler
- 官网:https://dolphinscheduler.apache.org/en-us
- 订阅开发者邮件:dev@dolphinscheduler@apache.org(向邮箱发送任意内容,收到邮件后回复同意订阅即可)
- YouTube:https://www.youtube.com/@apachedolphinscheduler
- Slack:https://join.slack.com/t/asf-dolphinscheduler/shared_invite/zt-1cmrxsio1-nJHxRJa44jfkrNL_Nsy9Qg
同样地,参与Apache DolphinScheduler 有非常多的参与贡献的方式,主要分为代码方式和非代码方式两种。
非代码方式包括:
完善文档、翻译文档;翻译技术性、实践性文章;投稿实践性、原理性文章;成为布道师;社区管理、答疑;会议分享;测试反馈;用户反馈等。
代码方式包括:
查找Bug;编写修复代码;开发新功能;提交代码贡献;参与代码审查等。
贡献第一个PR(文档、代码) 我们也希望是简单的,第一个PR用于熟悉提交的流程和社区协作以及感受社区的友好度。
社区汇总了以下适合新手的问题列表:https://github.com/apache/dolphinscheduler/pulls?q=is%3Apr+is%3Aopen+label%3A%22first+time+contributor%22优先级问题列表:https://github.com/apache/dolphinscheduler/pulls?q=is%3Apr+is%3Aopen+label%3Apriority%3Ahigh如何参与贡献链接:https://dolphinscheduler.apache.org/zh-cn/docs/3.2.2/%E8%B4%A1%E7%8C%AE%E6%8C%87%E5%8D%97_menu/%E5%A6%82%E4%BD%95%E5%8F%82%E4%B8%8E_menuhttps://github.com/apache/dolphinscheduler