聯合身份驗證實例
本實例要實現合作伙伴員工通過單一登錄來嘗試訪問其他合作伙伴域中的資源。聯合身份驗證方案中有三個主要角色:標識提供方、聲明提供方和信賴方。WIF會提供API 來構建所有這三個角色。
圖15-11說明了典型的聯合身份驗證方案。在此方案中,Fabrikam員工希望無需重新登錄即可訪問Contoso.com 資源,也就是使用單一登錄。
圖15-11 聯合身份驗證
參與此方案的虛構用戶包括:
q Frank:希望訪問Contoso資源的Fabrikam員工。
q Daniel:在應用程序中實施必要更改的Contoso 應用程序開發人員。
q Adam:Contoso IT管理員。
此方案中涉及的組件包括:
web1:一個部件訂購Web應用程序,使用ASP.NET構建,用於控制對相關部件的訪問。
sts1:一個STS,扮演Contoso.com中的聲明提供方角色,可發出應用程序 (web1) 預期的聲明。它已經與Fabrikam.com建立信任,並被配置為允許訪問Fabrikam員工。
sts2:一個STS,扮演Fabrikam.com 中的標識提供方角色,可提供對Fabrikam員工進行身份驗證的終結點。它已經與Contoso.com 建立信任,讓Fabrikam 員工可以訪問Contoso.com 資源。
如圖15-4所示,此方案中的流程如下:
1) Contoso管理員Adam對應用程序 (RP) 與 sts1之間的信任進行配置。
2) Contoso管理員Adam對與作為標識提供方的sts2之間的信任進行配置。
3) Fabrikam管理員Frank對與作為聲明提供方的sts1之間的信任進行配置,然後訪問應用程序。
下面來看實現聯合身份驗證的簡要流程。
步驟1 設置聲明提供方。
為Contoso.com管理員Adam提供三個可用選項:
q 安裝STS產品,如ADFS 2.0。
q 訂閱雲STS產品,如LiveID STS。
q 使用WIF構建自定義STS。
可以根據業務需要、時間表、技術資源的可用性、劃撥的預算等幾個因素來選擇選項。對於此示例方案,們假設Adam選擇選項1,並使用 ADFS 2.0 產品文檔將 ADFS 2.0安裝為RP-STS。
步驟2 安裝WIF。
添加代碼清單15-3所示的代碼來枚舉聲明。
代碼清單15-3 枚舉聲明
// Get the access to IClaimsIdentityIClaimsIdentity claimsIdentity = ((IClaimsPrincipal)Thread.CurrentPrincipal).Identities[0]; foreach ( Claim claim in claimsIdentity.Claims ) { // Before using the claims validate that this is an expected claim. // If it is not in the expected claims list then ignore the claim. if ( ExpectedClaims.Contains( claim.ClaimType ) ) { // Write out the claim or use the claim as needed by application logic WriteClaim( claim, table ); } }
步驟3 建立從信賴方應用程序到STS的信任。
Daniel使用Federation Utility工具建立從RP應用程序到STS的信任。該工具還會為RP應用程序生成元數據,並將xml文件 (metadata.xml) 放入RP應用程序的文件夾內。RP應用程序web.config文件中有關STS (sts1) 的信息會自動得到更新。
步驟4 是在聲明提供方處配置信賴方應用程序。
Adam通過參考 ADFS 2.0 產品文檔來建立與 RP 應用程序的信任。
步驟5 在Fabrikam 處配置身份提供方 (IP)。
為Fabrikam.com 管理員Frank 提供三個可用選項:
q 購買並安裝STS產品,如 ADFS 2.0。
q 訂閱雲STS 產品,如 LiveID STS。
q 使用WIF 構建自定義STS。
對於此示例方案,假設Frank選擇選項1並將 ADFS 2.0 安裝為 IP-STS。Frank也通過參考 ADFS 2.0 產品文檔來建立與作為聲明提供方的Contoso.com 的信任。
步驟6 訪問Web 應用程序。
Frank以Fabrikam 域用戶的身份登錄到Fabrikam 系統。然後,他打開浏覽器並訪問Contoso.com RP 應用程序頁面。由於已在Fabrikam 和Contoso 之間建立聯合身份驗證信任,所以Frank 現在無需重新進行身份驗證即可訪問Contoso 的資源。
上面的步驟,並不完整,希望讀者能從場景和概念上對聯合身份驗證有一個完整的認識
--------------------------注:本文部分內容改編自《.NET 安全揭秘》
作者:玄魂
出處:http://www.cnblogs.com/xuanhun/
查看本欄目