# 云計算設計模式(九)——聯合身份模式
驗證委托給外部身份提供者。這種模式可以簡化開發,最大限度地減少對用戶管理的要求,并提高了應用程序的用戶體驗。
## 背景和問題
用戶通常需要使用由提供,并通過與它們有商業關系的不同組織主持的多個應用程序一起工作。但是,這些用戶可能被迫使用特定的(和不同的)的憑證,每一個。這可以:
- 原因脫節的用戶體驗。用戶經常忘記登錄憑據時,他們有很多不同的的。
- 暴露安全漏洞。當用戶離開公司的帳戶,必須立即取消設置。這是很容易忽略這在大型組織中。
- 復雜的用戶管理。管理員必須管理憑據的所有用戶,以及執行等方面提供密碼提示的其他任務。
用戶會相反,通常期望使用相同的憑證用于這些應用。
## 解決方案
實現了可以使用聯合身份的認證機制。從應用程序代碼中分離的用戶身份驗證和身份驗證委派到受信任的身份提供者,可以大大簡化開發,讓用戶使用更廣泛的身份提供者(國內流離失所者),同時最大限度地減少管理開銷進行身份驗證。它也可以讓你清楚地分離的授權認證。
可信身份提供者可能包括公司目錄,內部部署聯合身份驗證服務,其他安全令牌服務(STS的)業務合作伙伴提供的,或社會身份提供者可以驗證誰擁有用戶,例如,微軟,谷歌,雅虎或Facebook帳戶。
圖1示出了當客戶端應用程序需要訪問要求身份驗證的服務的聯合身份模式的原理。該認證是通過身份提供者(IDP),在演唱其工作與安全令牌服務(STS)的執行。境內流離失所者問題的主張有關身份驗證的用戶的信息安全令牌。該信息被稱為權利要求中,包括用戶的身份,并且還可以包括其他信息,例如角色成員和更細粒度的訪問權限。

圖1 - 聯合身份驗證概述
該模型通常被稱為基于聲明的訪問控制。應用程序和服務授權訪問基于包含在令牌中的權利要求的特征和功能。要求身份驗證必須相信國內流離失所者的服務。客戶端應用程序的聯系人執行身份驗證境內流離失所者。如果認證成功,則的 IdP 返回包含用于識別用戶于 STS 的權利要求書的令牌(注意的 IdP 和 STS 可以是相同的服務)。在 STS 可以改變和增大中根據預定義的規則,令牌中的權利要求書,將其返回到客戶端之前。然后,客戶端應用程序可以將此令牌傳遞給服務作為其身份證明。
> 注意 在某些情況下可能會有額外的 STS 的信任鏈。例如,在微軟 Azure 的場景描述后,內部部署 STS 信任 STS 另一個是負責訪問的身份提供者對用戶進行認證。這種方法是在企業的情況普遍,其中有一個本地 STS 和目錄。
聯合身份驗證提供了一個基于標準的解決方案,在不同信任域身份的問題,并且可以支持單點登錄。它正在成為在所有類型的應用,特別是云托管的應用越來越普遍,因為它支持上,而不需要直接網絡連接到身份提供單點登錄。用戶不必輸入憑據為每一種應用。這增加了安全性,因為它阻止了訪問許多不同的應用程序所需的憑據的擴散,同時也隱藏了用戶的憑據所有,但原來的身份提供者。應用程序只看到包含的令牌中的身份驗證信息。
聯合身份也具有重大的優點,即人的身份和憑證管理是身份提供者的責任。應用程序或服務并不需要提供身份管理功能。另外,在企業環境中,企業目錄不需要知道關于用戶(提供它信任的身份提供者),它去除了管理該目錄中的用戶身份的所有的管理開銷。
## 問題和注意事項
設計實現聯合身份驗證的應用程序時考慮以下因素:
- 身份驗證可以是一個單點故障。如果您將應用程序部署到多個數據中心,考慮部署身份管理機制,以相同的數據中心,以保持應用程序的可靠性和可用性。
- 身份驗證機制,可以提供工具來配置基于包含在認證令牌的作用索賠的訪問控制。這通常被稱為基于角色的訪問控制(RBAC),并且它可以允許控制權訪問的功能和資源的更精細的水平。
- 與企業目錄,利用社會身份提供者通常不提供有關身份驗證的用戶以外的電子郵件地址,也許名稱的信息基于聲明的身份。一些社會身份提供者,如 Microsoft 帳戶,只提供一個唯一的標識符。應用程序通常將需要保持對注冊用戶的一些信息,并且能夠匹配該信息,包含在令牌中的權利要求書的標識符。典型地,這是通過一個注冊過程完成的用戶第一次訪問該應用程序時,信息然后被注入到令牌作為每個認證后附加的權利要求。
- 如果配置為 STS 多個身份提供者,它必須檢測其身份提供者,用戶應該被重定向到身份驗證。這個過程被稱為主領域發現。在 STS 可能能夠基于電子郵件地址或用戶名,該用戶提供,該用戶被訪問時,用戶的 IP 地址范圍,該應用程序的一個子域,或上的 cookie 中存儲的用戶的內容自動地執行此瀏覽器。例如,如果用戶在微軟域,如user@live.com 輸入一個電子郵件地址,在 STS 將用戶重定向到 Microsoft 帳戶登錄頁面。在隨后的訪問中,STS可以使用 cookie 來表示最后登錄用的 Microsoft 帳戶。如果自動發現無法確定主領域時,STS 將顯示一個家庭領域發現(HRD)頁,其中列出了受信任的身份提供者,用戶必須選擇他們想要使用的人。 何時使用這個模式
此模式是非常適合的范圍內的情況下,如:
- 在企業單點登錄。在這種情況下,您需要驗證員工被托管在云中的企業安全邊界以外的企業應用程序,而不需要他們每次訪問應用程序時簽署。用戶體驗是一樣的使用本地應用程序,他們簽約到公司網絡時,最初通過身份驗證的時候,并從此獲得所有相關的應用程序,而無需再次登錄。
- 與多個合作伙伴聯合身份。在這種情況下,您需要驗證這兩個企業的員工和業務合作伙伴誰沒有在公司目錄帳戶。這是企業對企業(B2B)的應用程序,集成與第三方服務,并在那里與不同的IT系統公司合并或共享資源的應用普遍。
- 在SaaS應用聯合身份。在這種情況下獨立軟件供應商(ISV)提供了一個即用型服務,為多個客戶或租戶。每個租戶將要使用適當的身份提供者進行身份驗證。例如,企業用戶會希望我們自己的企業資格證書,而租戶的消費者和客戶可能希望使用自己的社會身份憑證。
這種模式可能不適合于下列情況:
- 應用程序的所有用戶都可以通過一個標識提供者進行身份驗證,并沒有要求使用任何其他身份提供者進行身份驗證。這是典型的只使用企業目錄進行身份驗證業務應用,并獲得該目錄可在應用程序中直接使用VPN,或(在云中托管的情況下),通過導通之間的虛擬網絡連接本地目錄和應用程序。
- 應用程序最初建使用不同的認證機制,或許與自定義用戶存儲,或者不具有處理所用的權利要求為基礎的技術的協商標準的能力。改造基于聲明的身份驗證和訪問控制到現有的應用程序可能很復雜,可能不符合成本效益。
## 例子
組織舉辦了多租戶軟件即在 Azure 中的服務(SaaS)應用程序。該應用程序 incudes 一個網站,租戶可以用它來管理應用程序為自己的用戶。該應用程序允許租戶使用由活動目錄聯合服務(ADFS)產生的,當用戶通過該組織自己的 Active Directory 身份驗證的聯合身份訪問租戶的網站。圖2示出了該過程的概述。

圖2 - 用戶如何在大型企業用戶訪問應用程序
在圖 2 所示的場景中,商戶驗證自己的身份提供者(步驟1),在這種情況下 ADFS。在成功驗證租客,ADFS 發出的令牌。客戶端瀏覽器轉發此令牌至 SaaS 應用的聯合提供者,其信任的租戶的 ADFS 發出令牌,以便取回的令牌是有效的 SaaS 的聯合提供者(步驟 2)。如果有必要,在 SaaS 聯合會提供商上執行令牌中的權利要求書的權利要求到該應用程序識別的新令牌返回給客戶機瀏覽器之前(步驟3)的變換。應用程序信任的 SaaS 的聯合提供者發出的令牌,并使用在令牌中的權利要求書申請授權規則(步驟 4)。
租戶將不再需要記住不同的憑據來訪問應用程序,以及管理員租戶的公司將能夠在自己的 ADFS 配置可以訪問應用程序的用戶的列表。
- 前言
- (一)—— 緩存預留模式
- (二)—— 斷路器模式
- (三)—— 補償交易模式
- (四)——消費者的競爭模式
- (五)——計算資源整合模式
- (六)——命令和查詢職責分離(CQRS)模式
- (七)——事件獲取模式
- (八)——外部配置存儲模式
- (九)—— 聯合身份模式
- (十)——守門員模式
- (十一)—— 健康端點監控模式
- (十二)—— 索引表模式
- (十三)——領導人選舉模式
- (十四)——實體化視圖模式
- (十五)—— 管道和過濾器模式
- (十六)——優先級隊列模式
- (十七)—— 基于隊列的負載均衡模式
- (十八)—— 重試模式
- (十九)——運行重構模式
- (二十)—— 調度程序代理管理者模式
- (二十一)——Sharding 分片模式
- (二十二)——靜態內容托管模式
- (二十三)——Throttling 節流模式
- (二十四)—— 仆人鍵模式