联合身份验证
联合允许将授权权限委派给互操作的其他成员。 例如,请考虑以下业务问题:汽车零部件制造公司 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 功能角色的示例包括标识提供者、授权决策者、匿名者和资源管理器。
若要使客户端成功调用 WsRequestSecurityToken ,它需要知道该调用 (的参数,例如所需的令牌类型和声明类型) 、STS 请求通道 的安全说明 要求以及 STS 的 终结点地址 。 客户端应用程序可以使用以下任一技术来确定此信息:
- 将应用程序中的信息硬编码为设计时决策的一部分。
- 从本地应用程序部署程序设置的应用程序级别配置文件中读取此信息。
- 在运行时使用 元数据导入 功能与 WS_ISSUED_TOKEN_MESSAGE_SECURITY_BINDING_CONSTRAINT 结构动态发现此信息。
若要说明如何将动态 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 语法 部分。