联合身份验证

联合允许将授权权限委派给互操作的其他成员。 例如,请考虑以下业务问题:汽车零部件制造公司 Contoso Ltd 希望允许其客户 Fabrikam Inc 的授权员工安全地访问 Contoso 的零部件订单 Web 服务。 此方案的一种安全解决方案是,Contoso 使用 Fabrikam 设置信任机制,将访问授权决策委托给 Fabrikam。 此过程可以按如下方式工作:

  • Fabrikam 成为 Contoso 的合作伙伴后,会与 Contoso 签订信任协议。 此步骤的目的是就表示 Fabrikam 授权且 Contoso 可接受的安全令牌类型和内容达成一致。 例如,可以决定使用者名称为“CN=Fabrikam Inc Supplier STS”的受信任 X.509 证书应该为该 SAML 签名,以便 Contoso Web 服务接受该 SAML 令牌。 此外,可以决定已颁发的 SAML 令牌中的安全声明应为部件查找授权) 的“”https://schemas.contoso.com/claims/lookup (;对于部件排序授权) ,应为“”https://schemas.contoso.com/claims/order (。
  • 当 Fabrikam 员工使用内部部件订购应用程序时,它首先联系 Fabrikam 内部的 STS (STS) 。 该员工使用内部 Fabrikam 安全机制进行身份验证, (例如,Windows 域用户名/密码) ,验证其订购部件的授权,并颁发了包含适当声明的短期 SAML 令牌,并由上面确定的 X.509 证书签名。 然后,部件订购应用程序会联系提供颁发的 SAML 令牌的 Contoso 服务,以进行身份验证和执行排序任务。

在这里,Fabrikam STS 充当“发证方”,Contoso 部件服务充当“信赖方”。 显示联合身份验证中的发证方和信赖方的关系图。

联合功能

下面是联合方案中涉及的参与方或角色支持的安全功能:

  • 客户端:若要从 STS 获取安全令牌,可以使用 WsRequestSecurityToken 函数。 或者,可以使用客户端安全令牌提供程序库(如 CardSpace 或 LiveID),然后使用其输出使用 WsCreateXmlSecurityToken 在本地创建安全令牌。 无论采用哪种方式,一旦客户端具有安全令牌,它就会创建一个通道到服务,指定 WS_XML_TOKEN_MESSAGE_SECURITY_BINDING 来提供令牌,以及传输安全绑定(例如 WS_SSL_TRANSPORT_SECURITY_BINDING )来保护通道。
  • 服务器端:在使用颁发 SAML 令牌的安全令牌服务联合方案中,服务器可以使用 WS_SAML_MESSAGE_SECURITY_BINDING以及传输安全绑定(如 WS_SSL_TRANSPORT_SECURITY_BINDING )来保护通道。
  • STS 端:请注意,STS 是一个 Web 服务应用程序,它可以指定那些在创建侦听器时使用 安全说明 结构从它请求安全令牌的用户的安全要求,就像任何其他安全 Web 服务一样。 然后,它可以分析传入的请求消息有效负载以验证令牌请求,并将颁发的令牌作为回复消息有效负载发送回来。 目前,不提供任何功能来帮助这些分析和发出步骤。

请注意,客户端可以通常将颁发的安全令牌处理为 XML 安全令牌,而无需知道令牌类型,或执行特定于令牌类型的处理。 但是,服务器必须了解特定的安全令牌类型才能理解和处理它。 安全令牌请求和响应步骤使用 WS-Trust 规范中定义的构造。

更复杂的联合方案

联合方案可能涉及构成联合链的多个 STS。 请考虑以下示例:

  • 客户端使用 LiveID 用户名/密码向 LiveID STS 进行身份验证,并获取安全令牌 T1。
  • 客户端使用 T1 向 STS1 进行身份验证,并获取安全令牌 T2。
  • 客户端使用 T2 向 STS2 进行身份验证,并获取安全令牌 T3。
  • 客户端使用 T3 向目标服务 S 进行身份验证。

在这里,LiveID STS、STS1、STS2 和 S 构成了联合链。 联合链中的 STS 可能对整个应用程序方案执行各种角色。 此类 STS 功能角色的示例包括标识提供者、授权决策者、匿名者和资源管理器。

STS 请求参数和元数据交换

若要使客户端成功调用 WsRequestSecurityToken ,它需要知道该调用 (的参数,例如所需的令牌类型和声明类型) 、STS 请求通道 的安全说明 要求以及 STS 的 终结点地址 。 客户端应用程序可以使用以下任一技术来确定此信息:

若要说明如何将动态 MEX 与联合身份验证配合使用,请考虑上面的 3 个 STS 示例。 客户端将首先使用 S 执行动态 MEX,以获取有关 T3 (的信息,即从 STS2) 以及 STS2 动态 MEX 地址 (,即在何处查找 STS2) 。 然后,它将使用该信息通过 STS2 执行动态 MEX,以发现有关 T2 和 STS1 等的信息。

因此,动态 MEX 步骤在顺序 4、3、2、1 中发生,以建立联合链,令牌请求和演示步骤在顺序 1、2、3、4 中展开联合身份验证链。

注意

Windows 7 和 Windows Server 2008 R2:WWSAPI 仅支持轻量级 Web 服务安全配置文件 (LWSSP) 定义的 Ws-Trust 和 Ws-SecureConversation 有关 Microsoft 实现的详细信息,请参阅 LWSSP 的 MESSAGE 语法 部分。