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,还精心设计成能与当前数据库架构无缝衔接,保证所有用户都能轻松完成升级。

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

c2b90eb9-084c-4030-a359-ea1b76a0b2bd

  1. 设置重定向 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

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

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

  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 认证特性!所有工作都是公开进行的,大家可以在官方拉取请求里查看完整实现。

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

posted @ 2025-10-23 10:47  海豚调度  阅读(55)  评论(0)    收藏  举报