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