Stories

Detail Return Return

GSoC 成果公佈!印度開發者為 DolphinScheduler 引入通用 OIDC 認證,實現無縫安全訪問 - Stories Detail

導語:今年的 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 認證特性!所有工作都是公開進行的,大家可以在官方拉取請求裏查看完整實現。

  • 🔗 主要拉取請求:GitHub 上的 #17340
  • 谷歌暑期代碼計劃項目存檔:Dolphinscheudler 2025 年穀歌暑期代碼計劃項目
  • 📚 官方文檔:認證指南
  • 👨‍💻 聯繫我

    • GitHub:@tusaryan
    • 領英:Aryan Kumar

歡迎大家提出反饋,踴躍貢獻!感謝大家一同參與這段旅程。

user avatar chengdumeiyouni Avatar guoxiaoyu Avatar u_17470194 Avatar Rocokingdom2024 Avatar u_17021563 Avatar huaweichenai Avatar ydswin Avatar lyhabc Avatar alluxio_com Avatar zyuxuaner Avatar yangrd Avatar hex Avatar
Favorites 12 users favorite the story!
Favorites

Add a new Comments

Some HTML is okay.