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

微软已经进入了云的时代,客户也开始寻求将他们的应用系统移植到新的平台之上。要完成这些工作,首先要解决的就是认证和身份管理。为了了解相关信息,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 Brown和Matias 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平台实现联合服务的信息

  • Windows身份验证基础(WIF):一个开发框架,可以很容易的在.NET上实现安全机制。
  • Windows身份验证基础(WIF SDK):包括了Visual Studio的模板和向导,用来创建和激活声明式应用系统。
  • 活动目录联合服务 2.0 (AD FS) :微软的安全令牌服务,与活动目录进行了集成。
  • 声明式身份认证和访问控制指南由微软模式与实践团队完成的一本书,覆盖了使用联合服务应用时涉及到的方方面面的概念。
  • 身份验证开发者的培训工具包:提供了很多代码样例,同时包括如何循序渐进的使用不同的.NET技术实现联合服务,例如Azure,ASP.NET,Silverlight和WCF。
  • 白皮书:白皮书的合集,为开发人员概念性的讲解联合服务。
  • StarterSTS:一个开源的安全令牌服务,是Dominick Bayer基于WIF构建的。支持ASP.NET提供商,WS-Federation, WS-Trust, REST, OpenId和信息卡.
  • 身份认证成员展示:身份验证相关主题的访谈、公告和示例演示,由Vittorio Bertocci主持
  • 微软的身份管理网站

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

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

你可能感兴趣的:(微软程序经理Eugenio谈基于WIF和ADFS 2.0技术的身份联合服务)