【转】ADFS 概念与基本开发介绍
(如您轉載本文,必須標明本文作者及出處。如有任何疑問請與我聯(lián)系?me@nap7.com)
ADFS 相關開發(fā)技術的中文資料相對匱乏,之前在弄這個東西的時候搞的比較辛苦,因此總結此文檔,以解后人之憂。
本文會首先介紹與聯(lián)合身份驗證有關的概念及相關的系統(tǒng)設計意圖,隨后會對 ADFS 聯(lián)合身份驗證的配置過程、結構及處理流程進行闡述。然后會基于已有的系統(tǒng)提出一個支持多 ADFS 聯(lián)合身份驗證的改進實例,并對其結構及處理流程進行闡述。最后會對開發(fā)過程中所遭遇的一些問題進行介紹。真誠希望本文能夠幫助讀者較快地了解聯(lián)合身份驗證的相關知識。
一 ADFS 基本概念與設計意圖
1 基本概念闡述
1.1 聯(lián)合身份驗證
聯(lián)合身份驗證(Federated Identity)是一種用戶身份的驗證方式,這種驗證方式通過把用戶身份的驗證過程與被該用戶訪問的服務提供商(SP,Service Provider,如我們自己的站點)進行邏輯分離,在保證用戶身份信息被隔離在用戶所屬系統(tǒng)的內部的同時,為受信任的服務提供商提供所需要的用戶信息。
當服務提供商需要對用戶的身份進行驗證時,會將相關的驗證過程轉交給身份驗證提供方(IdP,Identity Provider,如AvePoint域的 AD FS 驗證服務),當用戶經由身份驗證提供方成功登錄后,身份驗證提供方會將用戶的身份驗證憑據(jù)和用戶相關的信息返還給服務提供商,從而實現(xiàn)服務提供商對于用戶身份的驗證,以及對于用戶信息獲取。
常見的聯(lián)合身份驗證的實現(xiàn)有SAML、OAuth、OpenID等方式,本文主要介紹的是基于Claims和SAML 2.0的 AD FS 聯(lián)合身份驗證。在基于Claims的聯(lián)合身份驗證的過程中,當身份驗證提供方完成對于用戶身份的驗證,返還用戶的相關信息時,其數(shù)據(jù)信息實體被稱之為令牌(Token),其中的相關信息字段被稱為聲明(Claims)。令牌保證了用戶身份的真實性,并包含了實用信息,其結構如下圖所示。
?
1.2 基于Claims的身份驗證簡述
基于傳統(tǒng)的開發(fā)方式,創(chuàng)建一個應用程序(即服務提供商)并保證多種身份驗證機制可以協(xié)調工作并不是一件簡單的工作。首先,我們需要決定對于特定的應用程序,哪一種身份驗證技術最為合適。如果應用程序允許用戶通過不同的方式進行訪問,例如,允許同屬一個組織下的域用戶群體,或者跨越不同組織的多個域下的域用戶群體,再或者同時允許這些域用戶及傳統(tǒng)的注冊用戶通過公網對應用程序進行訪問,那么使用傳統(tǒng)的單一的身份驗證機制是完全不能滿足這些需求的。在這些需求下,應用程序應該以直接經由用戶所屬的組織或系統(tǒng)處獲取對應用戶驗證的結果。同時,也需要從一個AD目錄服務或其它某處查詢到用戶相關的信息,并且保證這些信息可以在公網上,能夠以統(tǒng)一的方式進行傳遞。
基于Claims的身份驗證(Claims-based identity)為我們提供了這種統(tǒng)一的身份驗證方式,讓不同的服務提供商可以通過公網,獲得所需要的保存在用戶所屬組織內部的關于用戶的驗證信息。其基本流程如下圖所示。
首先,用戶通過客戶端(如瀏覽器),訪問服務提供商(如圖中①過程,相對于身份驗證提供方也可以稱其為信賴方RP)。信賴方向身份驗證提供方提出驗證請求(如圖中②所示),身份驗證提供方會要求用戶輸入登陸憑據(jù)(如用戶名及驗證碼)。在通過其驗證確認后,身份驗證提供方會將驗證成功的消息及該用戶相關的數(shù)據(jù)信息以令牌的方式交還給信賴方(如圖中③所示)。
以我的站點與某第三方聯(lián)合身份驗證系統(tǒng)的驗證流程為例,其過程也可以用如下的時序圖闡明。
如前所述,我們涉及到兩個新的概念,依賴方與安全令牌服務。
信賴方(RP,Relying Party)就相當于服務提供商,也就是由我們構建的依賴聲明的應用程序(如我的網站)。信賴方有時也被稱為“聲明感知應用程序”或“基于聲明的應用程序”。信賴方作為應用程序需要使用由安全令牌服務(STS)所頒發(fā)的令牌,并從令牌中提取聲明,從而進行用戶身份的驗證和用戶信息的獲取。
安全令牌服務(STS,Security Token Service),信賴方所使用的令牌的創(chuàng)建者就是安全令牌服務。它作為一個Web服務存在。STS可以由我們自行構建,也可以應用已有的實現(xiàn),AD聯(lián)合身份驗證服務(AD FS)就是一個STS的實現(xiàn)。
為了充分利用基于Claims的身份驗證機制,我們將會使用由微軟提供的用于支撐應用程序實現(xiàn)聯(lián)合認證功能的可供依賴的基礎架構。這些技術包括:AD聯(lián)合身份驗證服務(AD FS,Active Directory Federation Services),與Windows身份驗證基礎類庫(WIF,Windows Identity Foundation)。
1.3 AD FS
Active Directory聯(lián)合身份驗證服務(AD FS,Active Directory Federation Services)是由微軟自Windows Server 2003 R2起,在各個Server版本操作系統(tǒng)中提供的一個軟件組件,其最新版本是集成在Windows Server 2012 R2的AD FS 3.0。
AD FS 使用基于Claims的訪問控制驗證模型來實現(xiàn)聯(lián)合認證。它提供 Web 單一登錄技術,這樣只要在會話的有效期內,就可對一次性的對用戶所訪問的多個Web應用程序進行驗證。
我們可以將 AD FS 理解為組織域內與公網之外用戶橋梁。我們編寫的應用程序作為Internet服務在公網部署,當程序需要對域內的用戶進行驗證時,就可以委托 AD FS 服務器進行驗證。 AD FS 服務提供了一個 AD FS 聯(lián)合服務器代理,這類似于一個只提供了登錄界面的應用程序,我們將相關域用戶的驗證過程委托給該程序進行處理,該程序將提示用戶輸入驗證憑據(jù)(這可以是在瀏覽器中彈出登錄提示框或跳轉到一個登錄頁面的形式),隨后其將所獲取的憑據(jù)傳遞給AD FS聯(lián)合身份驗證服務。 AD FS 作為AD的一部分有權限(其擁有AD域管理員的權限)使用AD DS的標準方式認證一個域內的用戶,如果認證成功,AD FS 將會依據(jù)應用程序預先設定的信息需求,以Claims的形式將安全令牌信息返還給我們的應用程序。
1.4 AD FS 聯(lián)合服務代理
如前所述,AD FS 聯(lián)合服務代理是運行用戶通過Internet進行 AD FS 的客戶端身份驗證憑據(jù)采集的接口,它會將獲取到的憑據(jù)傳遞給聯(lián)合身份驗證服務器進行驗證處理。
1.5 WIF
Windows身份驗證基礎類庫(WIF,Windows Identity Foundation)是一組.NET Framework類,它為我們提供了實現(xiàn)基于聲明標識的應用程序的基礎框架。在具體的實現(xiàn)過程中,主要利用了其中的WSFederation Authentication Module(WS-FAM)HTTP模塊。
1.6 概念總結
以上給出的相關概念層層遞進,相似的概念在不同領域層次有著不同的稱謂,為了方便理解,下面對這些概念的關系進行簡單的總結。
| 在AD?FS中的稱謂 | 在SAML中的稱謂 | 概念簡述 |
| Security Token 安全令牌 | Assertion 聲明 | 作為安全信息的封裝,用于描述一個用戶的信息,它在聯(lián)合身份驗證的訪問請求期間被創(chuàng)建。 |
| Claims Provider 聲明提供方 | Identity Provider (IdP) 身份驗證提供方 | 為用戶創(chuàng)建安全令牌的聯(lián)合身份認證程序。 |
| Relying Party 信賴方 | Service Provider (SP) 服務提供商 | 收到聯(lián)合身份驗證服務信賴的請求并使用安全令牌的應用程序。 |
| Claims 聲明 | Assertion attributes 屬性聲明 | 在安全令牌中的關于用戶的數(shù)據(jù)信息。 |
下圖對相關的領域結構進行了劃分。
2 設計意圖
2.1 登錄模塊概述
基于注冊用戶的賬戶管理方式并不能很好地適用于商業(yè)系統(tǒng)的使用場景。例如,當系統(tǒng)相關管理人員離開組織后,仍需其他的管理者對系統(tǒng)內相關聯(lián)的賬戶信息進行進一步的維護。對于組織賬戶的信息應該交由組織的域服務器進行統(tǒng)一的管理及驗證。因此,我們需要為系統(tǒng)添加獨立的基于AD FS的聯(lián)合身份驗證。從而使系統(tǒng)既支持傳統(tǒng)的注冊用戶,又支持域用戶的使用。當用戶登錄時,系統(tǒng)會檢查用戶賬戶的后綴名,如果賬戶名稱以someone@nap7.com形式輸入,或者采用nap7\someone的形式,則認定為域用戶,系統(tǒng)將會自動跳轉到AD FS聯(lián)合身份驗證服務器,進行用戶身份的驗證,如果驗證通過,其使用方式與正常的注冊用戶完全一致。
2.2 聯(lián)合身份驗證的好處
聯(lián)合身份驗證的主要優(yōu)勢是:
(1)互聯(lián)網現(xiàn)有的服務提供商不計其數(shù),如果用戶需要在每個服務提供商處都申請賬戶,那對于用戶自身來講無疑是一個巨大的負擔,用戶可能有幾十個需要維護的身份驗證信息,為了訪問不同的服務提供商,用戶就必須記住每一個ID和對應口令。如果用戶在不同的服務提供商處使用相同的身份驗證信息,那么一旦有一個站點發(fā)生安全信息的泄露,則可能直接導致用戶在所有服務提供商處的信息收到嚴重威脅;
(2)如果用戶以企業(yè)員工的身份訪問服務提供商,則會涉及到諸如批量用戶導入、身份授權、刪除授權及用戶信息等問題。例如,當一個屬于組織O的用戶A以組織員工身份在服務提供商S處注冊了一個賬戶后,該員工A離開了之前的組織O,這時,這個用戶A就不應該繼續(xù)在服務S處代表該組織O。此時需要在服務提供商S處將該用戶的訪問權限清除,而這一操作本應由組織O來完成,對于未使用聯(lián)合身份驗證的系統(tǒng)來說,這是很難實現(xiàn)的;
(3)可以實現(xiàn)單點登錄(SSO)。
2.3 擴展:如何支持多個AD域
如果我們的項目只是針對公司內部的成員使用,繼承單個ADFS是足夠的,但是,當項目作為云端服務,針對的用戶群體可能是很多個企業(yè)級的用戶。因此,就產生了對于多AD FS域獨立驗證的需求?;谝延械膯蜛D FS的實現(xiàn),本文稍后會提供一個支持多個AD域AD FS的聯(lián)合身份驗證服務的實現(xiàn)示例。
如果需要實現(xiàn)多個域的域用戶登錄,首先需要將相關域的AD FS配置信息保存在系統(tǒng)的數(shù)據(jù)庫中,并提供相應方法,可以解析出用戶所對應的域。這可以通過在用戶信息表中保存用戶對應的域配置,也可以通過用戶的名稱來獲取對應配置。在獲取相應的AD FS配置后,我們需要通過WIF所提供的API及相關事件,對當前用戶的AD FS配置信息及完成驗證后所需要的證書指紋信息進行設置。設置完成后,系統(tǒng)將會跳轉到對應的AD FS登錄頁面,從而對用戶的身份進行驗證。驗證成功后,跳轉回系統(tǒng),完成Security Token的驗證。完成這些操作后,系統(tǒng)將生成用戶的Cookie,完成登陸流程。
?
參考文檔:
http://nap7.com/adfs-introduce-and-develop/
其他:
https://blog.51cto.com/gaowenlong/1722479
總結
以上是生活随笔為你收集整理的【转】ADFS 概念与基本开发介绍的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 靠档计息被叫停是怎么回事?哪些银行有靠档
- 下一篇: 信用卡积分什么时候到期 信用卡积分兑换什