导语:今年的 GSoC 已近尾声,在这场代码开发盛宴中,Apache DolphinScheduler 的开发者们积极参与,取得了一项对用户意义重大的成果------引入通用 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?打个比方
不妨把 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:Keycloak、Dexidp
- 商业 IdP:Okta、Auth0、Microsoft Entra ID(Azure AD)
- 云原生代理:OAuthProxy
- 企业与社交登录:飞书、企业微信登录
工作原理:深入剖析
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 身份提供商,感受一下这个系统的灵活性。
- 步骤 1 :配置 Dex
在 Dex 配置文件里,把 DolphinScheduler 加到staticClients
列表里。
示例 Dex 配置文件 config.yaml
:
-
步骤 2 :配置 DolphinScheduler
在
application.yaml
里加一个新的提供商条目。 -
步骤 3 :登录!
重启 DolphinScheduler API 服务器之后,登录页面就会出现 "Login with Keycloak" 和 "Login with Dex" 按钮。
开启 OIDC 的 DolphinScheduler 登录页面
两种方式的用户流程都很顺畅:
- 用户点击新的登录按钮。
- 跳转到 Keycloak / Dex 登录页面,输入凭证。
- 登录成功后,回到 DolphinScheduler 用户界面,完成认证。
👨💻 我的谷歌暑期代码计划(GSoC)之旅与致谢
这个项目让我学到了超多,核心目标只有一个:为企业打造一个真正通用的认证解决方案。
我先深入研究了 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
- 谷歌暑期代码计划项目存档 :Dolphinscheudler 2025 年谷歌暑期代码计划项目
- 📚 官方文档 :[认证指南](https://dolphinscheduler.apache.org/en - us/docs/latest/guide/security/authentication - type.html%2523oidc - openid - connect)
- 👨💻 联系我 :
- GitHub:@tusaryan
- 领英:Aryan Kumar
欢迎大家提出反馈,踊跃贡献!感谢大家一同参与这段旅程。