转自:http://www.cnblogs.com/WizardWu/archive/2010/10/04/1841793.html
本帖简介 .NET 新一代的 Windows Identity Foundation (WIF) 框架,及其与 WCF 的协同运用。文后提供两本 WCF 4 书籍、一本 WIF 书籍的下载地址,及许多网络上的学习资源。
本帖并非要详述 WIF 的功能细节,事实上重点在文后的 30 多项学习资源,提供网友将来需要学习时作为参考。不然此等新技术,等到它普及不知要多少年后。一般传统产业、非软件公司的 IT 部门,可能到现在连 WCF、WF 都没听过,小弟我还知道台湾某些金融业的开发部门,还在用 .NET 1.1 / VS 2003 开发,系统只求稳定即可;至于新技术...,浅尝学习一下即可 (除非时间太多),重点在于怎么搭配产业 know-how 和企业的需求,以作导入与否的评估。
书籍下载地址,请参考文后「学习资源」的 [3], [31]。本帖后续也简单介绍「Programming WCF 4 (Wrox)」这本书第九章里,与 WIF 有关的部分内容。
图 1 书籍封面及目录
若您下载「Programming WCF 4 (Wrox)」书上的代码,发现编译时找不到「Microsoft.IdentityModel 程序集」,那是因为您的 Windows 尚未安装 WIF。只要去微软的网站下载和安装 [7] (安装文件仅约 1.5 MB),Visual Studio 2008/2010 即可正确编译。以下是 WIF 安装的系统需求:
------------------------------------------------------
WIF 安装需要下列操作系统之一:
* 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 新建的内容如下图 2,除此之外的命名空间应是在 .NET 3.5 时代即已存在[6]。
图 2 WIF 在 .NET 4 里新加入的命名空间和类
Windows Identity Foundation (WIF, Windows 身份验证基础),先前代号为 Geneva 框架。若要用最简单的几句话来介绍,其为微软 .NET 平台的一个身份标识新框架,它将 WS-Trust 和 WS-Federation 协议抽象化,帮助开发者从应用程序中排除掉身份验证的处理,只用单一的编程模式和工具,即可构建基于「声明」的身份验证、授权、及其他安全功能,改善开发者生产力 (避免过去应用程序复杂的认证过程)、增强程序安全性、提供协同合作性,以在 Azure 云端,或非云端的 ASP.NET 与 WCF 应用程序,实现「单点登陆 (SSO)」、个性化、联合化、强验证、身份验证委托,以及其他验证功能。 WIF 可便捷地将非云端应用程序迁移至 Windows Azure (从身份验证的角度),反之亦然 [10], [16]。
在 WIF 中,除了更容易实现单点登录,且应用程序不用再负责以下操作 [4]:
* 对用户进行身份验证。
* 存储用户帐户和密码。
* 调用企业目录以查看用户标识的详细信息。
* 从其他平台或公司,与既有的标识系统集成。
WIF 可用于任何使用 .NET 3.5 SP1、.NET 4 的 Web 应用程序或 Web 服务。但 WIF 只是微软的「联合身份标识」软件系列的一部分。「联合身份标识」包含三种组件:Active Directory Federation Services (ADFS) V2 (之前称为「Geneva」服务器)、Windows CardSpace、WIF。 这三种组件共同构成了微软基于「声明」的新访问平台其核心。
对于使用 WIF 的 WCF 服务,开发者不再需要用典型 WCF 身份验证和授权行为初始化 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。下方代码说明了如何在自托管环境中构造 WSTrustServiceHost 类型 [20]:
图 4 书中第九章的示例,用 STS 项目、WSTrustServiceHost 类的实例,做 WCF 的自托管 (Self-hosting)
------------------------------------------------------
书上也有对「安全令牌服务 (STS, Security Token Service)」和「安全声明标记语言 (SAML, Security Assertions Markup Language)」的介绍。若搭配 MSDN Magazine 的图片和中文说明,会更容易了解 [19]。
图 5 STS 实现了 WS-Trust 规格,可处理不同类型凭据的身份验证,以颁发出安全令牌,大幅简化 ASP.NET、WCF 等不同应用程序中的验证和授权代码
书上和 MSDN Magazine 也有提到,用 STS 达到跨域做单点登录的议题 [19]。在联合方案中 (Federation Authentication),STS 可在两个或多个安全域之间建立信任关系,以便用户可以对管理其凭据的域进行身份验证,同时仍可获得另一个域中资源的访问权限,如下图 6。因为 STS 会对其中一个域 B 的用户,在进行身份验证后,颁发携带声明的 SAML 安全令牌,里面包含了被验证用户的身份标识、用户的访问权限,然后此令牌会作为 Cookie 返回到浏览器,如上图 5;之后当用户浏览至域 A 中的 Web 应用程序,会将 SAML 令牌作为 Cookie 进行传递,此时由于两个域中的 STS 存在信任关系,域 A 中的 STS 会信任此令牌的签名。
图 6 使用 STS 达到跨 Domain 做 SSO (Single Sign On),无需再跨多个应用程序和域维护用户凭据
通过使用诸如 Active Directory Federation Server (ADFS) 和 WIF 的联合安全平台,在域之间添加新的信任关系也变得更加容易。将应用程序扩展到企业实体内的其他域,甚至扩展到外部合作伙伴的域也变得更容易 [17]。
另附带一提,微软云计算 Windows Azure AppFabric 服务,包含 Access Control、AppFabric Service Bus 两大服务功能。前者 (ACS, Access Control Service) 对用户访问的安全权限控制,也与 STS、SAML Token、声明式的授权有关,以避免某些复杂的验证过程。 Azure 应用程序取得 Token 其步骤大致如下:
- 用户将它的 SAML Token (Security Assertions Markup Language) 传送给 Access Control Service。
- STS (Security Token Service) 依据规则,产生新的 SAML Token。
- 在访问控制内的 STS,将新产生的 Token 传送给客户端。
- 客户端再将新产生的 Token 传送给应用程序 (如上图 5 的 WCF、ASP.NET、...)
- 应用程序就依据这个 Token,来决定用户的权限为何、能做什么、...等等。
----------------------------------------------------------------------------------------
附注:名词解释 1
http://msdn.microsoft.com/zh-cn/magazine/cc948343.aspx [18]
http://msdn.microsoft.com/zh-cn/library/ee748490.aspx
安全令牌服务 (STS)
安全令牌服务 (STS) 是用于根据 WS-Trust 和 WS-Federation 协议构建、签署和颁发安全令牌的服务组件。实施这些协议需要进行大量的工作,但 WIF 能为您完成所有这些工作,让那些不精通协议的人很容易即可启动并运行 STS。 您可以使用云 STS (如 LiveID STS)、预先构建的 STS (如 Active Directory Federation Service (AD FS) 2.0),或者如果想要颁发自定义令牌或提供自定义身份验证或授权,则可以使用 WIF 构建自己的自定义 STS。借助 WIF 即可轻松地构建自己的 STS。
安全令牌服务允许进一步合并安全逻辑的工具。STS 的典型任务是验证用户,随后创建可以包含声明的安全令牌。客户端必须首先使用 STS 进行验证,然后将返回的令牌转发到客户端希望进行通信的服务。
因为 STS 了解服务 (该信息是令牌请求的一部分),所以它可以进行集中授权并预先生成服务所需的声明。这样声明转换完全不需要在服务端点进行,它可以通过 STS 集中完成。当系统复杂到一定程度时,它可以大幅简化安全基础结构。
当多个信任域联合时,安全令牌服务也是重要的基础结构组件。通过在多个令牌服务间建立信任,您可以跨越服务所能使用的信任边界交换安全令牌。
WCF 具备支持前述方案的自动客户端/服务端,以及编写 STS 所需的所有基类。但正确实现所有 WS-* 相关规范是一项非常复杂的任务。您应该购买商业 STS 或使用更高级别的工具包 (例如:Zermatt) 编写自定义规范。即将面世的 Microsoft Active Directory 联合身份验证服务版本旨在为 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的用户可以验证那些具有声明意识的应用程序,并为担当关于那些用户的声明 (属性) 的“权威人士”,无论用户信息储存于 Active Directory, SQL数据库,还是其他存储。作为一个联合服务,AD FS 2.0 提供了为联合关系的单点管理。使用例如 SAML 2.0 此类的工业标准协议,可以实现从合作伙伴组织或云端,Active Directory 用户的单点登陆。
开发者可同时使用 ACS、WIF,以及 AD FS v2 来开发网络服务,其结合了 Active Directory 安全性与功能性,灵活性,定制的访问控制规则,简便的紧密结合的开发体验。
----------------------------------------------------------------------------------------
学习资源:
[1] Claims 认证详解(1)
http://www.cnblogs.com/time-is-life/archive/2010/09/24/1834045.html
http://msdn.microsoft.com/zh-cn/library/microsoft.identitymodel.claims.claim.aspx
[2] dotNET Framework 4 新版 API 和命名空间、API 海报下载
http://www.cnblogs.com/WizardWu/archive/2010/03/14/1685590.html
[3] WCF 4 书籍下载
Programming WCF 4 (Wrox)
Programming WCF Services, 3rd.Edition (O‘Reilly, Aug 2010)
http://www.silverlightchina.net/html/download/books/2010/0920/1945.html
http://www.silverlightchina.net/html/download/books/2010/0817/1770.html
http://silverlightchina.net/index.html
出版社的书籍介绍、代码下载
http://www.wrox.com/WileyCDA/WroxTitle/Professional-WCF-4-Windows-Communication-Foundation-with-NET-4.productCd-0470563141.html
http://oreilly.com/catalog/9780596805494/
[4] Windows Identity Foundation 介绍
http://msdn.microsoft.com/zh-cn/library/ee748475.aspx
http://msdn.microsoft.com/zh-cn/library/ee748484.aspx
http://msdn.microsoft.com/zh-cn/library/ee517291.aspx
http://msdn.microsoft.com/zh-cn/library/ee748508.aspx
[5] WCF 应用程序与 WIF 兼容性
http://msdn.microsoft.com/zh-cn/library/ee517294.aspx
[6] Microsoft.IdentityModel 类库、命名空间 (Windows Identity Foundation)
http://msdn.microsoft.com/zh-cn/library/ee709285.aspx
WSTrustServiceHost 类
http://msdn.microsoft.com/zh-cn/library/microsoft.identitymodel.protocols.wstrust.wstrustservicehost.aspx
[7] Windows Identity Foundation 安装程序下载 (四种版本,安装后才能编译书上第九章的示例)
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=EB9C345F-E830-40B8-A5FE-AE7A864C4D76
http://www.microsoft.com/downloads/details.aspx?FamilyID=eb9c345f-e830-40b8-a5fe-ae7a864c4d76&displayLang=zh-cn
http://msdn.microsoft.com/zh-cn/evalcenter/dd440951.aspx
系统需求:
http://support.microsoft.com/Default.aspx?kbid=974405
[8] Active Directory Federation Services 2.0 RTW 下载 (2010/05/05)
http://technet.microsoft.com/en-us/evalcenter/ee476597.aspx
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=118C3588-9070-426A-B655-6CEC0A92C10B
http://www.microsoft.com/downloads/details.aspx?FamilyID=118C3588-9070-426A-B655-6CEC0A92C10B&displayLang=zh-cn
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=118c3588-9070-426a-b655-6cec0a92c10b&displaylang=en
[9] Active Directory Federation Services 2.0 homepage (Windows Server 2008 R2)
http://www.microsoft.com/windowsserver2008/en/us/ad-fs-2-overview.aspx
[10] Windows Identity Foundation (WIF) 正式发布
http://www.cnblogs.com/shanyou/archive/2009/12/02/WIF.html
http://www.cnblogs.com/shanyou/category/72906.html
Web 单点登录系统
http://blog.csdn.net/shanyou/archive/2010/02/28/5372233.aspx
[11] Windows Identity Foundation 官网 (英文, 有许多资源和文档可下载)
http://msdn.microsoft.com/en-us/security/aa570351.aspx
[12] WIF Support for Windows Server 2003
http://blogs.msdn.com/card/archive/2009/12/18/announcing-wif-support-for-windows-server-2003.aspx
[13] download Microsoft’s Identity and Access Management Platform Whitepapers
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=9ca5c685-3172-4d8f-81cb-1a59bdc9f7e3&displaylang=en
Active Directory Federation Services 2.0, Windows Identity Foundation & Windows CardSpace comprise an identity & access solution to help developers and IT professionals simplify access to applications and other systems with an open claims-based model.
[14] WIF Workshop 7: WIF and WCF (2010/06/23, 在线影片, 印度腔很重)
http://channel9.msdn.com/Shows/Identity/WIF-Workshop-7-WIF-and-WCF
[15] Claims based access platform (CBA), code-named Geneva (MSDN Forum)
http://social.msdn.microsoft.com/Forums/en-US/Geneva/threads
[16] Windows身份验证基础(Windows Identity Foundation) 常见问题解答 :
什么是 Windows身份验证基础(Windows Identity Foundation (WIF)) ?
Windows Azure 平台可以使用 WIF 吗 ?
什么是 Active Directory Federation Services 2.0 (ADFS 2.0) ?
http://blogs.msdn.com/b/azchina/archive/2010/03/04/windows-windows-identity-foundation.aspx
[17] 通过 WIF 实现基于声明的授权 (MSDN Magazine, 11 月 2009)
什么是「安全令牌服务 (STS)」?
http://msdn.microsoft.com/zh-cn/magazine/ee335707.aspx
[18] 基于 WCF 服务中的授权 (MSDN Magazine, 10 月 2008)
什么是「安全令牌服务 (STS)」?
http://msdn.microsoft.com/zh-cn/magazine/cc948343.aspx
[19] Geneva 框架:构建基于声明的 WCF 服务的更好方法 (MSDN Magazine, 12 月 2008)
http://msdn.microsoft.com/zh-cn/magazine/dd278426.aspx
[20] Geneva 框架:构建自定义安全令牌服务 (MSDN Magazine, 1 月 2009)
http://msdn.microsoft.com/zh-cn/magazine/dd347547.aspx
[21] WCF 应用程序兼容性、如何在 WCF 服务上启用 WIF
http://msdn.microsoft.com/zh-cn/library/ee517294.aspx
[22] 构建 WCF 信赖方应用程序 (TechNet)
http://207.46.16.252/zh-cn/library/ee748476.aspx
[23] Windows Communication Foundation (MSDN)
http://msdn.microsoft.com/zh-cn/library/dd456779.aspx (WCF 4)
http://msdn.microsoft.com/zh-cn/library/ms735119.aspx (WCF 3.5)
http://msdn.microsoft.com/en-us/netframework/aa663324.aspx
http://msdn.microsoft.com/zh-cn/netframework/aa663324.aspx
[24] Improving Web Services Security: Scenarios and Implementation Guidance for WCF、Download the Guide
http://msdn.microsoft.com/en-us/library/cc949034.aspx
http://wcfsecurity.codeplex.com/
[25] WIF - Pablo M. Cibraro (aka Cibrax)
http://weblogs.asp.net/cibrax/archive/tags/WIF/default.aspx
[26] WCF 分布式安全开发实践、WCF 4.0 新特性体验
http://www.cnblogs.com/frank_xl/category/203947.html
http://www.cnblogs.com/frank_xl/category/220067.html
http://msdn.microsoft.com/zh-cn/library/dd456789.aspx
[27] WCF 身份验证之用户名密码认证、通信安全
http://www.cnblogs.com/ejiyuan/category/248002.html
[28] WCF 安全 - 迷失code的博客 - 博客园
http://www.cnblogs.com/viter/tag/WCF/
http://www.cnblogs.com/viter/tag/wcf%e5%ae%89%e5%85%a8/
[29] WCF - Artech - 博客园
http://www.cnblogs.com/artech/tag/WCF/
[30] MonoTouch, WCF 4 and WIF on iPad ?
http://forums.monotouch.net/yaf_postst884.aspx
http://social.msdn.microsoft.com/Forums/en-US/Geneva/thread/07cdd622-e02e-43ae-8e48-054e3daabe3a
[31] Programming Windows Identity Foundation 书籍下载 (September, 2010)
a. http://www.itpub.net/redirect.php?tid=1353990&goto=lastpost
b. http://www.ebookee.net/Programming-Windows-Identity-Foundation_749877.html
http://hotfile.com/dl/72955426/3080221/Microsoft.Press.Programming.Windows.Identity.Foundation.Sep.2010.rar_gigatraining.net.html
书籍介绍
http://www.amazon.com/gp/product/0735627185?ie=UTF8&tag=wwwcloudident-20&linkCode=as2&camp=1789&creative=9325&creativeASIN=0735627185
http://blogs.msdn.com/b/vbertocci/archive/2010/07/06/how-wif-wedges-itself-in-the-wcf-pipeline.aspx
[32] A Guide to Claims-Based Identity and Access Control (Patterns & Practices) 书籍介绍
http://www.amazon.com/Claims-Based-Identity-Control-Patterns-Practices/dp/0735640599/ref=pd_sim_b_1
[33] Exercise 1: Enabling claims based access for an ASP.NET Web Application by generating a local STS
http://channel9.msdn.com/learn/courses/IdentityTrainingCourse/WebSitesAndIdentity/WebSitesAndIdentityLab/Exercise-1-Enabling-claims-based-access-for-an-ASPNET-Web-Application-by-generating-a-local-STS/
[34] Exercise 2: Using ACS with SAML Tokens
http://channel9.msdn.com/Learn/Courses/Azure/IdentityAzure/IntroToACSLab/Exercise-2-Using-ACS-with-SAML-Tokens
[35] 为什么微软要推 WCF Data Service (REST)
http://www.cnblogs.com/WizardWu/archive/2008/12/14/1354490.html
[36] Access Control in the Cloud: Windows Azure AppFabric‘s ACS
http://www.devproconnections.com/article/net-framework2/Access-Control-in-the-Cloud-Windows-Azure-AppFabric-s-ACS.aspx
[37] OASIS Web Services Federation (WSFED) TC、 WS-Trust 1.3 OASIS Standard
http://oasis-open.org/committees/tc_home.php?wg_abbrev=wsfed
http://docs.oasis-open.org/ws-sx/ws-trust/200512/ws-trust-1.3-os.html