【IT168 评论】.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)」的功能