GSoC 成果公布!印度开发者为 DolphinScheduler 引入通用 OIDC 认证,实现无缝安全访问

导语:今年的 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 注册成新客户端。
  1. 创建客户端:给它起个客户端 ID(比如 dolphinscheduler - client)

  2. 设置重定向 URI :这一步很关键。要加上 DolphinScheduler API 服务器的回调 URL,格式是 http://{api - host:port}/dolphinscheduler/login/oauth2/code/{provider - id}。要是本地搭建的环境,就是 http://localhost:12345/dolphinscheduler/login/oauth2/code/keycloak

  3. 获取凭证:到 "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 登录页面

两种方式的用户流程都很顺畅:

  1. 用户点击新的登录按钮。
  2. 跳转到 Keycloak / Dex 登录页面,输入凭证。
  3. 登录成功后,回到 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 认证特性!所有工作都是公开进行的,大家可以在官方拉取请求里查看完整实现。

欢迎大家提出反馈,踊跃贡献!感谢大家一同参与这段旅程。

相关推荐
想ai抽5 小时前
大数据计算引擎-从源码看Spark AQE对于倾斜的处理
大数据·数据仓库·spark
开源能源管理系统5 小时前
MyEMS 是什么?一文读懂企业能源管理系统的核心定位与应用场景
开源
在未来等你5 小时前
Elasticsearch面试精讲 Day 30:Elasticsearch面试真题解析与答题技巧
大数据·分布式·elasticsearch·搜索引擎·面试
Micra5205 小时前
8款企业微信SCRM工具功能对比分析
大数据·经验分享
培培说证6 小时前
2025年大专计算机技术专业就业方向!
大数据
在未来等你6 小时前
Elasticsearch面试精讲 Day 27:备份恢复与灾难恢复
大数据·分布式·elasticsearch·搜索引擎·面试
涛思数据(TDengine)6 小时前
TDengine TSDB 3.3.8.0 上线:SMA、TLS、TDgpt、taosX、taosgen 一次全进化
大数据·数据库·时序数据库·tdengine
研究司马懿6 小时前
【GitOps】Argo CD app of apps
大数据·开发语言·elasticsearch·搜索引擎·云原生·argocd·gitops
qqxhb6 小时前
系统架构设计师备考第49天——数字孪生体&云计算&大数据技术
大数据·系统架构·云计算·saas·paas·iaas·数字孪生体