本文講的是<b>dex:來自CoreOS的開源身份認證服務解決方案,</b>【編者的話】今天CoreOS釋出了一個新的開源項目dex,一個基于OpenID Connect的身份服務元件。 CoreOS已經将它用于生産環境:自家的tectonic.com上。使用者認證和授權是應用安全的一個重要部分,使用者身份管理本身也是一個特别專業和複雜的問題,尤其對于企業應用而言, 安全的進行認證和授權是必選項,dex無疑是解決這一問題的一大利器。
幾乎每一個項目都需要某種認證和使用者管理。應用也需要一種方式能讓使用者從多種平台安全地登入, 例如web、移動端、指令行工具(CLI),以及自動化系統等。開發者通常使用一個依賴于平台的解決方案, 或者當常常發現已有的解決方案無法的解決他們的需求後就自己從頭寫一個解決方案。
然而, 大多數開發者并不負責安全的業務。讓他們自己寫認證軟體不僅會讓他們從核心産品的開發工作中分心,同時也顯然會帶來軟體安全方面的危險。正确的處理安全方面的工作是很有難度的, 我們最近看到很多引人注目的安全事故,在沒有被其他工程師或者安全專家做恰當審計的情況下任意而為隻會帶來更多的風險。
正是基于這些原因, 我們決定開源dex,這樣我們已經完成的讓dex成為一個安全健壯的平台的工作會讓其他人也能受益。開放給社群之後,dex反過來也會從更多的合作者中受益。沒有人再需要自己寫一遍“忘記密碼?”的流程,或者“以X,Y或者Z來登入”的功能了。
項目起名為『dex』是因為它是一個中心化的使用者索引, 軟體裡面其他元件可以基于dex做認證。
Dex如此獨特是它包含了以下這些元素, 這些元素從最開始就驅動着設計和實作:
安全是首要的工作:dex的設計采用了安全和加密的最佳實踐來最小化攻擊者獲得系統通路權限的風險。 更進一步, dex的架構劃分也可以減輕任何單個攻擊可能帶來的損害。例如,dex預設使用軟token生命周期,并自動輪換它的簽名秘鑰。由于秘鑰本身是加密的,攻擊者需要在短時間内同時侵入資料庫和一個dex worker才能得到一個tocken。
dex有自己的使用者的概念, 但也允許通過不同的方式做認證, 稱之為連接配接器<code>connector</code>。 現在, dex自帶了兩種類型的連接配接器: 本地<code>local</code>連接配接器和OIDC 連接配接器。 當使用<code>local</code>連接配接器做認證時, 使用者使用email和密碼通過dex本身提供的定制化UI來登入; 當使用OIDC連接配接器時, 使用者可以通過登入第三方的OIDC身份服務提供方來認證, 例如Google或者Salesforce。
因為dex本身就是一個OIDC身份服務提供者, 它甚至可以做到将多個dex執行個體串聯到一起,每個執行個體依次将認證工作委派給下一個。
現在使用者必須在連接配接器中做選擇,但是在未來我們計劃允許身份的連結<code>linking</code>, 這樣每個單獨的使用者都可以以不同的方式登入。 可擴充的連接配接器架構将會允許與多種身份服務做內建,例如GitHub, LDAP, SAML系統等。
下面的圖描述了整個部署:

dex Infrastructure Diagram
在我們的防火牆之後,我們有如下幾個元件:
一個postgres資料庫用作dex的後端存儲
一個單獨的dex-overlord, 負責輪換秘鑰和其他的管理任務
多個dex-worker, 提供前端給終端使用者做認證
産品站點,Tectonic.com
在OIDC中的依賴方(Relying Party, RP)-此案例中, 即我們的産品站點-為了一個ID token, 與身份提供者(identity provider, IdP),也就是dex, 交換一個Authorization Token(從終端使用者那得到, 這裡是Tectnoic的使用者)。 注意雖然這裡我們把我們的應用和dex都一起放在同一個防火牆後面, 但這并不是必須的。 他們互相之間是通過跨公網的一個TLS連接配接來溝通;如果你有多個不同的應用跑在不同的環境并都需要認證時這是相當有用的。
當使用者選擇使用Google賬号做認證時,dex就臨時變成RP,Google就變成了IdP來認證和識别使用者。 一但dex完成了這個工作(通過上面提到的token交換協定), dex就回來成為IdP并完成與Tectonic.com的token交換。
整個過程中token都是加密簽名過的,用戶端會檢查簽名。 簽名的秘鑰會持續的被IdP來輪換并被RP來同步。
授權 - 除了讓dex處理認證之外,我們也想要讓它成為一個通用的授權伺服器。
使用者管理 - 我們正處理初始開發階段:開發API讓管理者來管理使用者, 但是很快它會更加完整并且也會帶UI。
多個遠端的身份 - 如上所述,使用者将會可以使用多種認證方法做認證
更多的連接配接器類型 - 例如,LDAP、GitHub等。
原文釋出時間為:2015-09-04
本文作者:yahoon
本文來自雲栖社群合作夥伴DockerOne,了解相關資訊可以關注DockerOne。
原文标題:dex:來自CoreOS的開源身份認證服務解決方案