詳解WCF 4安全性以及新WIF框架介紹
本文簡介 .NET 新一代的 Windows Identity Foundation (WIF) 框架,及其與 WCF 的協(xié)同運用。文后提供兩本 WCF 4 書籍、一本 WIF 書籍的下載地址,及許多網(wǎng)絡上的學習資源。
本帖并非要詳述 WIF 的功能細節(jié),事實上重點在文后的 30 多項學習資源,提供網(wǎng)友將來需要學習時作為參考。不然此等新技術(shù),等到它普及不知要多少年后。一般傳統(tǒng)產(chǎn)業(yè)、非軟件公司的 IT 部門,可能到現(xiàn)在連 WCF、WF 都沒聽過,小弟我還知道臺灣某些金融業(yè)的開發(fā)部門,還在用 .NET 1.1 / VS 2003 開發(fā),系統(tǒng)只求穩(wěn)定即可;至于新技術(shù)...,淺嘗學習一下即可 (除非時間太多),重點在于怎么搭配產(chǎn)業(yè) know-how 和企業(yè)的需求,以作導入與否的評估。
書籍下載地址,請參考文后「學習資源」的 [3], [31]。本帖后續(xù)也簡單介紹「Programming WCF 4 (Wrox)」這本書第九章里,與 WIF 有關(guān)的部分內(nèi)容。
圖 1 書籍封面及目錄
若您下載「Programming WCF 4 (Wrox)」書上的代碼,發(fā)現(xiàn)編譯時找不到「Microsoft.IdentityModel 程序集」,那是因為您的 Windows 尚未安裝 WIF。只要去微軟的網(wǎng)站下載和安裝 [7] (安裝文件僅約 1.5 MB),Visual Studio 2008/2010 即可正確編譯。以下是 WIF 安裝的系統(tǒng)需求
------------------------------------------------------
WIF 安裝需要下列操作系統(tǒng)之一:
* Windows 7(32 位或 64 位)
* Windows Server 2008 R2 (64 位)
* Windows Server 2008 + Service Pack 2 (32 位或 64 位)
* Windows Vista + Service Pack 2 (32 位或 64 位)
* Windows Server 2003 + Service Pack 2 (32 位或 64 位)
* Windows Server 2003 R2 (32 位或 64 位)
WIF 需要有下列 .NET 版本或更高之版本:
* .NET 3.5 + Service Pack 1
------------------------------------------------------
至于 Windows Identity Foundation (WIF) 為何物?我曾在今年年初的「dotNET Framework 4 新版 API 和命名空間」一文中 [2] 有稍微提到,當時并提供 .NET 4 的海報 pdf 下載,其類庫在 .NET 4 新建的內(nèi)容如下圖 2,除此之外的命名空間應是在 .NET 3.5 時代即已存在 [6]。
圖 2 WIF 在 .NET 4 里新加入的命名空間和類
Windows Identity Foundation (WIF, Windows 身份驗證基礎),先前代號為 Geneva 框架。若要用最簡單的幾句話來介紹,其為微軟 .NET 平臺的一個身份標識新框架,它將 WS-Trust 和 WS-Federation 協(xié)議抽象化,幫助開發(fā)者從應用程序中排除掉身份驗證的處理,只用單一的編程模式和工具,即可構(gòu)建基于「聲明」的身份驗證、授權(quán)、及其他安全功能,改善開發(fā)者生產(chǎn)力 (避免過去應用程序復雜的認證過程)、增強程序安全性、提供協(xié)同合作性,以在 Azure 云端,或非云端的 ASP.NET 與 WCF 應用程序,實現(xiàn)「單點登陸 (SSO)」、個性化、聯(lián)合化、強驗證、身份驗證委托,以及其他驗證功能。 WIF 可便捷地將非云端應用程序遷移至 Windows Azure (從身份驗證的角度),反之亦然 [10], [16]。
在WIF中,除了更容易實現(xiàn)單點登錄,且應用程序不用再負責以下操作 [4]:
對用戶進行身份驗證。
存儲用戶帳戶和密碼。
調(diào)用企業(yè)目錄以查看用戶標識的詳細信息。
從其他平臺或公司,與既有的標識系統(tǒng)集成。
WIF 可用于任何使用 .NET 3.5 SP1、.NET 4 的 Web 應用程序或 Web 服務。但 WIF 只是微軟的「聯(lián)合身份標識」軟件系列的一部分?!嘎?lián)合身份標識」包含三種組件:Active Directory Federation Services (ADFS) V2 (之前稱為「Geneva」服務器)、Windows CardSpace、WIF。 這三種組件共同構(gòu)成了微軟基于「聲明」的新訪問平臺其核心。
對于使用 WIF 的 WCF 服務,開發(fā)者不再需要用典型 WCF 身份驗證和授權(quán)行為初始化 ServiceHost 實例。WIF 取代了這些行為,并提供更簡潔的方式進行一般的安全配置、身份驗證設置 [5], [17]。
ServiceHost 類 (.NET 4、.NET 3.5)
http://msdn.microsoft.com/zh-cn/library/system.servicemodel.servicehost.aspx
http://msdn.microsoft.com/zh-cn/library/system.servicemodel.servicehost%28VS.90%29.aspx
WSTrustServiceHost 類
http://msdn.microsoft.com/zh-cn/library/ee735268.aspx
圖 3 WIF 的 WSTrustServiceHost 類,繼承自 WCF 的 ServiceHost 類,并添加了「安全令牌服務 Security Token Service (STS)」的功能
WIF 框架提供了用于托管 STS 實例的自定義 ServiceHost 類型 WSTrustServiceHost。下方代碼說明了如何在自托管環(huán)境中構(gòu)造 WSTrustServiceHost 類型 [20]:
圖 4 書中第九章的示例,用 STS 項目、WSTrustServiceHost 類的實例,做 WCF 的自托管 (Self-hosting)
書上也有對「安全令牌服務 (STS, Security Token Service)」和「安全聲明標記語言 (SAML, Security Assertions Markup Language)」的介紹。若搭配 MSDN Magazine 的圖片和中文說明,會更容易了解 [19]。
圖 5 STS 實現(xiàn)了 WS-Trust 規(guī)格,可處理不同類型憑據(jù)的身份驗證,以頒發(fā)出安全令牌,大幅簡化 ASP.NET、WCF 等不同應用程序中的驗證和授權(quán)代碼
書上和 MSDN Magazine 也有提到,用 STS 達到跨域做單點登錄的議題 [19]。在聯(lián)合方案中 (Federation Authentication),STS 可在兩個或多個安全域之間建立信任關(guān)系,以便用戶可以對管理其憑據(jù)的域進行身份驗證,同時仍可獲得另一個域中資源的訪問權(quán)限,如下圖 6。因為 STS 會對其中一個域 B 的用戶,在進行身份驗證后,頒發(fā)攜帶聲明的 SAML 安全令牌,里面包含了被驗證用戶的身份標識、用戶的訪問權(quán)限,然后此令牌會作為 Cookie 返回到瀏覽器,如上圖 5;之后當用戶瀏覽至域 A 中的 Web 應用程序,會將 SAML 令牌作為 Cookie 進行傳遞,此時由于兩個域中的 STS 存在信任關(guān)系,域 A 中的 STS 會信任此令牌的簽名。
圖 6 使用 STS 達到跨 Domain 做 SSO (Single Sign On),無需再跨多個應用程序和域維護用戶憑據(jù)
通過使用諸如 Active Directory Federation Server (ADFS) 和 WIF 的聯(lián)合安全平臺,在域之間添加新的信任關(guān)系也變得更加容易。將應用程序擴展到企業(yè)實體內(nèi)的其他域,甚至擴展到外部合作伙伴的域也變得更容易 [17]。
另附帶一提,微軟云計算 Windows Azure AppFabric 服務,包含 Access Control、AppFabric Service Bus 兩大服務功能。前者 (ACS, Access Control Service) 對用戶訪問的安全權(quán)限控制,也與 STS、SAML Token、聲明式的授權(quán)有關(guān),以避免某些復雜的驗證過程。 Azure 應用程序取得 Token 其步驟大致如下:
1.用戶將它的 SAML Token (Security Assertions Markup Language) 傳送給 Access Control Service。
2.STS (Security Token Service) 依據(jù)規(guī)則,產(chǎn)生新的 SAML Token。
3.在訪問控制內(nèi)的 STS,將新產(chǎn)生的 Token 傳送給客戶
4.客戶端再將新產(chǎn)生的 Token 傳送給應用程序 (如上圖 5 的 WCF、ASP.NET、...)
5.應用程序就依據(jù)這個 Token,來決定用戶的權(quán)限為何、能做什么、...等
----------------------------------------------------------------------------------------
附注:名詞解釋 1
http://msdn.microsoft.com/zh-cn/magazine/cc948343.aspx [18]
http://msdn.microsoft.com/zh-cn/library/ee748490.aspx
安全令牌服務 (STS)
安全令牌服務 (STS) 是用于根據(jù) WS-Trust 和 WS-Federation 協(xié)議構(gòu)建、簽署和頒發(fā)安全令牌的服務組件。實施這些協(xié)議需要進行大量的工作,但 WIF 能為您完成所有這些工作,讓那些不精通協(xié)議的人很容易即可啟動并運行 STS。 您可以使用云 STS (如 LiveID STS)、預先構(gòu)建的 STS (如 Active Directory Federation Service (AD FS) 2.0),或者如果想要頒發(fā)自定義令牌或提供自定義身份驗證或授權(quán),則可以使用 WIF 構(gòu)建自己的自定義 STS。借助 WIF 即可輕松地構(gòu)建自己的 STS。
安全令牌服務允許進一步合并安全邏輯的工具。STS 的典型任務是驗證用戶,隨后創(chuàng)建可以包含聲明的安全令牌??蛻舳吮仨毷紫仁褂?STS 進行驗證,然后將返回的令牌轉(zhuǎn)發(fā)到客戶端希望進行通信的服務。
因為 STS 了解服務 (該信息是令牌請求的一部分),所以它可以進行集中授權(quán)并預先生成服務所需的聲明。這樣聲明轉(zhuǎn)換完全不需要在服務端點進行,它可以通過 STS 集中完成。當系統(tǒng)復雜到一定程度時,它可以大幅簡化安全基礎結(jié)構(gòu)。
當多個信任域聯(lián)合時,安全令牌服務也是重要的基礎結(jié)構(gòu)組件。通過在多個令牌服務間建立信任,您可以跨越服務所能使用的信任邊界交換安全令牌。
WCF 具備支持前述方案的自動客戶端/服務端,以及編寫 STS 所需的所有基類。但正確實現(xiàn)所有 WS-* 相關(guān)規(guī)范是一項非常復雜的任務。您應該購買商業(yè) STS 或使用更高級別的工具包 (例如:Zermatt) 編寫自定義規(guī)范。即將面世的 Microsoft Active Directory 聯(lián)合身份驗證服務版本旨在為 WCF 提供功能完備的 STS。
------------------------------------------------------
附注:名詞解釋 2
http://msdn.microsoft.com/en-us/security/aa570351.aspx [11]
http://www.microsoft.com/windowsserver2008/en/us/ad-fs-2-overview.aspx
Active Directory Federation Services 2.0 (ADFS 2.0)
Active Directory Federation Services 2.0 是對于 Active Directory 的一個新拓展,它使得 Active Directory 成為了對于那些具有聲明意識的應用程序的基礎設施。 通過 Security Token Service (STS), AD FS 2.0 使得 Active Directory的用戶可以驗證那些具有聲明意識的應用程序,并為擔當關(guān)于那些用戶的聲明 (屬性) 的“權(quán)威人士”,無論用戶信息儲存于 Active Directory, SQL數(shù)據(jù)庫,還是其他存儲。作為一個聯(lián)合服務,AD FS 2.0 提供了為聯(lián)合關(guān)系的單點管理。使用例如 SAML 2.0 此類的工業(yè)標準協(xié)議,可以實現(xiàn)從合作伙伴組織或云端,Active Directory 用戶的單點登陸。
開發(fā)者可同時使用 ACS、WIF,以及 AD FS v2 來開發(fā)網(wǎng)絡服務,其結(jié)合了 Active Directory 安全性與功能性,靈活性,定制的訪問控制規(guī)則,簡便的緊密結(jié)合的開發(fā)體驗。
原文標題:WCF 4 安全性和 WIF 簡介
鏈接:http://www.cnblogs.com/WizardWu/archive/2010/10/04/1841793.html
【編輯推薦】