技术开发 频道

WCF4安全性详解以及.NET新WIF框架简介

  WIF 框架提供了用于托管 STS 实例的自定义 ServiceHost 类型 WSTrustServiceHost。下方代码说明了如何在自托管环境中构造 WSTrustServiceHost 类型 [20]:

1
 

  图 4 书中第九章的示例,用 STS 项目、WSTrustServiceHost 类的实例,做 WCF 的自托管 (Self-hosting)

  书上也有对「安全令牌服务 (STS, Security Token Service)」和「安全声明标记语言 (SAML, Security Assertions Markup Language)」的介绍。若搭配 MSDN Magazine 的图片和中文说明,会更容易了解 [19]。

1
 

  图 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 会信任此令牌的签名。

1
 

  图 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 其步骤大致如下:

  1. 用户将它的 SAML Token (Security Assertions Markup Language) 传送给 Access Control Service。

  2. STS (Security Token Service) 依据规则,产生新的 SAML Token。

  3. 在访问控制内的 STS,将新产生的 Token 传送给客户端。

  4. 客户端再将新产生的 Token 传送给应用程序 (如上图 5 的 WCF、ASP.NET、...)

  5. 应用程序就依据这个 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 安全性与功能性,灵活性,定制的访问控制规则,简便的紧密结合的开发体验。

0
相关文章