微软程序经理 Eugenio 谈基于 WIF 和 ADFS 2.0 技术的身份联合服务

  • Jon Arild Tørresdal
  • 池建强

2010 年 6 月 1 日

话题:.NET云计算DevOps语言 & 开发架构

微软已经进入了云的时代,客户也开始寻求将他们的应用系统移植到新的平台之上。要完成这些工作,首先要解决的就是认证和身份管理。为了了解相关信息,InfoQ 的编辑 Arild Tørresdal 与Eugenio Pace进行了一次对话。微软最近发布了联合与身份认证技术,Eugenio Pace 就是其中模式与实践团队的高级程序经理。

联合服务的价值不仅仅是在云端,对那些希望与合作伙伴进行整合或要进行多应用单点登录的公司,同样具有吸引力。对于开发人员或 IT 专业人士,可以在 .NET 平台获取更多关于联合服务的信息,InfoQ 也收集了一系列相关资源,希望会有帮助,在文章的结尾可以找到这些资源列表。

InfoQ:能否为我们简单介绍一下联合服务及其遇到的挑战和要解决的问题?

Eugenio:今天的很多应用都需要自己进行用户认证。他们通过管理用户证书的方式进行用户认证,一般是基于表单的用户名 / 密码或者其他形式的共享机密。这就导致了用户信息库的增加,每一个应用都会对应一份用户信息。在很多环境下,这种方式还不错,但在许多其他的场景中,这种方式就显示出它的局限性了。例如,如果每个应用系统都在自己的数据库存一份用户信息,当你想实现一个“单点登录”的体验时就变得有些困难。很多管理任务也会相应增加,比如创建一个新用户的帐户信息,你不得不在每个应用系统都做一遍同样的事情。同时增加的还有安全风险:假如一个用户已经无效了,而你可能忘记从某个系统中注销这个用户,这就会无意中造成这个用户仍然能够访问系统。身份联合服务(和基于认证架构的相关声明)的目标就是应对上面提到的这些挑战,其做法就是把用户的认证信息从应用系统迁移到一个特殊的服务上:“身份提供商”。

InfoQ:以前.NET 的联合服务是很难用的,需要具备高深的安全知识才行。微软做了哪些改进呢?

Eugenio:微软最近发布了 Windows 身份验证基础(WIF),这是一个声明式的.NET 类库。WIF 已经与 SDK 和工具一起集成到了 Visual Studio 环境中,这样可以更好的简化开发实践。

InfoQ:你会说,联合服务将会被最大程度的采用并获得最大的好处么?

Eugenio:身份联合服务最让人兴奋的应用场景之一就是针对基于云的应用系统。我相信随着公司把越来越多的应用移到云端,基于声明式的身份认证将是最好的方式。

InfoQ:你,Dominick Baier, Vittorio Bertocci, Keith BrownMatias Woloski最近出版了一本书《声明式身份认证和访问控制指南》,既有 PDF 版本也有书,关于这本书,你能说点什么吗?

Eugenio:这个指南的目标就是为了帮助开发人员快速了解声明式身份认证的好处。本书描述一些很普通的场景(像单点登录,合作伙伴的整合,通过 Web 服务的整合),对于特殊需求,可以用特别的考虑和设计去实现。最终目标就是为了加快声明式身份认证的使用。

InfoQ:你提到了声明。据我所知声明从.NET 1.0 版本就有了,但一直没有被广泛使用。现在声明看上去成了.NET 身份验证模型中的核心部分。你能简单描述一下声明模型吗?它与传统模型有什么不同?

Eugenio:WIF 的设计目的就是让开发人员远离身份验证的所有细节,包括校验,解析和交换安全令牌。WIF 实现了 WS-Federation 和 WS-Trust 协议,能够处理 SAML1.1 和 2.0 的安全令牌。开发人员更多是去处理更高水平的抽象,例如使用接口IPrincipalIIdentity,WIF 为此提供了专门的版本:IClaimsPrincipalIClaimsIdentity

InfoQ:关于 WIF 框架,你还能告诉我们什么?

Eugenio:WIF 可以无缝集成到很多通用和流行的应用框架中,例如开发 Web 站点的 ASP.NET,开发 Web 服务的 WCF 等。对于许多场景来说,开发者只是简单使用他们已经熟悉的抽象好的类库,例如接口IPrincipal。WIF 会在运行时自动找到具体的声明式实现。例如,在一个 ASP.NET 应用中,开发人员可以一直调用User.Identity.Name,这个Identity的实现其实是IClaimsIdentity,而且 Name 事实上是一个属性,是从声明式集合中提取出来的。集成到 Visual Studio 的工具允许开发者通过声明的方式自动转换现有的应用。例如在 Visual Studio 中有个“增加 STS 引用”的向导,可以实现“支持声明方式”Web 应用的转换。

InfoQ:ADFS2.0 是微软集成了活动目录的安全令牌服务。目前(顾名思义)只支持活动目录。你认为 ADFS 今后会变成一个纯粹的基于 AD 的安全令牌服务,还是会有其他的集成方式?

Eugenio:目前 ADFS2.0 只能通过 AD 实现用户认证。不过,针对发布声明,ADFS2.0 提供了丰富的和可扩展的引擎,以便使用各种类型的存储介质。基于开箱即用的原则,ADFS2.0 能够从存储在 LDAP 目录和 SQL 仓库的信息中发布声明。当然,你还可以开发自定义类型的引擎来支持特殊的存储介质。

InfoQ:ADFS 有一个可选的代理选项,可以让用户通过互联网认证公司域名。我发现很难告诉 IT 人员这种做法是安全的。你能解释一下这个代理机制是如何工作的吗?你推荐大家怎么做呢?

Eugenio:每个场景都是不同的,每个客户都应该根据自己的具体需求进行分析。当然主要的场景就是你刚才描述的。代理在你内部的 STS 之上提供了一个附加的安全层。代理可以通过扩展的方式实现多重身份认证,进一步强化互联网用户的认证需求。

InfoQ:现在我知道了 ADFS2.0 支持 SAML 令牌,那么它也支持 SAML 协议吗?

Eugenio:现在 ADFS2.0 支持 SAML 协议,支持 IdP Lite,SPLite 和 EGov1.5,同时通过了自主联盟的互操作性测试。

InfoQ:非常感谢你抽时间接受我们的采访。

资源列表

开发者和 IT 专业人士可以根据以下的资源列表找到更多关于如何在.NET 平台实现联合服务的信息

查看英文原文:Eugenio Pace on Identity Federation, WIF and ADFS 2.0


译者简介:池建强,12 年软件从业经验,先后在洪恩软件和用友集团任职。目前在用友集团瑞友科技 IT 应用研究院任副院长,负责公司基础应用平台的研发和整个公司的技术管理。主要关注领域:企业应用软件平台研发、领域驱动设计,OSGi,动态语言应用、云计算、移动互联等相关技术。
.NET云计算DevOps语言 & 开发架构