Dex 是一種身分識別服務,它使用 OpenID Connect 來驅動其他應用程式的身份驗證。
Dex 透過「連接器」充當其他身分提供者的入口。這使得 dex 可以延遲 LDAP 伺服器、SAML 提供者或已建立的身份提供者(如 GitHub、Google 和 Active Directory)的身份驗證。客戶端編寫一次身份驗證邏輯以與 dex 對話,然後 dex 處理給定後端的協定。
ID 令牌是 OpenID Connect 和 dex 的主要功能所引入的 OAuth2 擴充。 ID 令牌是由 dex 簽署的 JSON Web 令牌 (JWT),並作為證明最終使用者身分的 OAuth2 回應的一部分傳回。 JWT 範例可能如下所示:
eyJhbGciOiJSUzI1NiIsImtpZCI6IjlkNDQ3NDFmNzczYjkzOGNmNjVkZDMyNjY4NWI4NjE4MGMzMjRkOTkifQ.eyJpc3MiOiJodHRwOi8vMTI3LjAuMC4xOjU1NTYvZGV4Iiwic3ViIjoiQ2djeU16UXlOelE1RWdabmFYUm9kV0kiLCJhdWQiOiJleGFtcGxlLWFwcCIsImV4cCI6MTQ5Mjg4MjA0MiwiaWF0IjoxNDkyNzk1NjQyLCJhdF9oYXNoIjoiYmk5NmdPWFpTaHZsV1l0YWw5RXFpdyIsImVtYWlsIjoiZXJpYy5jaGlhbmdAY29yZW9zLmNvbSIsImVtYWlsX3ZlcmlmaWVkIjp0cnVlLCJncm91cHMiOlsiYWRtaW5zIiwiZGV2ZWxvcGVycyJdLCJuYW1lIjoiRXJpYyBDaGlhbmcifQ.OhROPq_0eP-zsQRjg87KZ4wGkjiQGnTi5QuG877AdJDb3R2ZCOk2Vkf5SdP8cPyb3VMqL32G4hLDayniiv8f1_ZXAde0sKrayfQ10XAXFgZl_P1yilkLdknxn6nbhDRVllpWcB12ki9vmAxklAr0B1C4kr5nI3-BZLrFcUR5sQbxwJj4oW1OuG6jJCNGHXGNTBTNEaM28eD-9nhfBeuBTzzO7BKwPsojjj4C9ogU4JQhGvm_l4yfVi0boSx8c0FX3JsiB0yLa1ZdJVWVl9m90XmbWRSD85pNDQHcWZP9hR6CMgbvGkZsgjG32qeRwUL_eNkNowSBNWLrGNPoON1gMg
ID 令牌包含標準聲明,斷言哪個用戶端應用程式登入了使用者、令牌何時過期以及使用者的身分。
{
"iss" : " http://127.0.0.1:5556/dex " ,
"sub" : " CgcyMzQyNzQ5EgZnaXRodWI " ,
"aud" : " example-app " ,
"exp" : 1492882042 ,
"iat" : 1492795642 ,
"at_hash" : " bi96gOXZShvlWYtal9Eqiw " ,
"email" : " [email protected] " ,
"email_verified" : true ,
"groups" : [
" admins " ,
" developers "
],
"name" : " Jane Doe "
}
由於這些令牌由 dex 簽署並包含基於標準的聲明,因此其他服務可以將它們用作服務到服務的憑證。已經可以使用 dex 發行的 OpenID Connect ID 令牌的系統包括:
有關如何請求或驗證 ID Token 的詳細信息,請參閱“編寫使用 dex 的應用程式” 。
Dex 使用自訂資源定義在任何 Kubernetes 叢集之上本機運行,並且可以透過 OpenID Connect 外掛程式驅動 API 伺服器驗證。客戶端(例如kubernetes-dashboard
和kubectl
)可以代表可以透過任何身分識別提供者 dex 支援登入叢集的使用者進行操作。
當使用者透過 dex 登入時,使用者的身分通常會儲存在另一個使用者管理系統中:LDAP 目錄、GitHub 組織等。客戶端只需要了解 OpenID Connect 即可查詢 dex,而 dex 實作了一系列用於查詢其他使用者管理系統的協定。
「連接器」是 dex 用於根據另一個身分提供者對使用者進行身份驗證的策略。 Dex 實作了針對特定平台(例如 GitHub、LinkedIn 和 Microsoft)以及既定協定(例如 LDAP 和 SAML)的連接器。
根據協定中的連接器限制,可能會阻止 dex 發出刷新令牌或傳回群組成員身分聲明。例如,由於 SAML 不提供非互動式方式來刷新斷言,因此如果使用者透過 SAML 連接器登錄,dex 不會向其客戶端發出刷新令牌。需要離線存取的用戶端(例如kubectl
需要刷新令牌支援。
Dex 實作了以下連接器:
姓名 | 支援刷新令牌 | 支持團體主張 | 支援首選使用者名稱聲明 | 地位 | 筆記 |
---|---|---|---|---|---|
LDAP | 是的 | 是的 | 是的 | 穩定的 | |
GitHub | 是的 | 是的 | 是的 | 穩定的 | |
SAML 2.0 | 不 | 是的 | 不 | 穩定的 | 警告:未維護且可能容易受到身份驗證繞過 (#1884) |
GitLab | 是的 | 是的 | 是的 | 貝塔 | |
OpenID 連接 | 是的 | 是的 | 是的 | 貝塔 | 包括 Salesforce、Azure 等。 |
OAuth 2.0 | 不 | 是的 | 是的 | 阿爾法 | |
是的 | 是的 | 是的 | 阿爾法 | ||
領英 | 是的 | 不 | 不 | 貝塔 | |
微軟 | 是的 | 是的 | 不 | 貝塔 | |
授權代理 | 不 | 是的 | 不 | 阿爾法 | 身份驗證代理,例如 Apache2 mod_auth 等。 |
比特桶雲 | 是的 | 是的 | 不 | 阿爾法 | |
開放式班次 | 是的 | 是的 | 不 | 阿爾法 | |
阿特拉斯人群 | 是的 | 是的 | 是的 * | 貝塔 | Preferred_username 聲明必須透過 config 配置 |
吉泰亞 | 是的 | 不 | 是的 | 貝塔 | |
OpenStack 基石 | 是的 | 是的 | 不 | 阿爾法 |
穩定版、貝塔版和阿爾法版定義為:
連接器功能的所有變更或棄用都將在發行說明中公佈。
有關報告漏洞的詳細信息,請參閱我們的安全政策。
當所有編碼和測試完成後,請執行測試套件:
make testall
為了獲得最佳的開發人員體驗,請安裝 Nix 和 direnv。
或者,手動或使用套件管理器安裝 Go 和 Docker。透過執行make deps
安裝其餘依賴項。
發布流程請閱讀發布文件。
此專案根據 Apache 授權 2.0 版授權。