联邦
联合允许授权授权委派给间隙的其他成员。 例如,请考虑以下业务问题:汽车零部件制造公司 Contoso Ltd 希望允许其客户 Fabrikam Inc 的授权员工安全地访问 Contoso 的部件订单 Web 服务。 此方案的安全解决方案之一是 Contoso 使用 Fabrikam 设置信任机制,以便将访问授权决策委托给 Fabrikam。 此过程可能如下所示:
- Fabrikam 成为 Contoso 的合作伙伴时,与 Contoso 建立了信任协议。 此步骤的目标是就表示 Fabrikam 授权的安全令牌类型和内容达成一致,并且 Contoso 可以接受。 例如,可以决定使用使用者名称“CN=Fabrikam Inc 供应商 STS”的受信任 X.509 证书应为 Contoso Web 服务接受的 SAML 令牌签名。 此外,可以决定颁发的 SAML 令牌中的安全声明应为“https://schemas.contoso.com/claims/lookup”(用于部分查找授权)或“https://schemas.contoso.com/claims/order”(用于部分排序授权)。
- 当 Fabrikam 员工使用内部部件订购应用程序时,它首先联系 Fabrikam 内部的安全令牌服务(STS)。 该员工使用内部 Fabrikam 安全机制(例如 Windows 域用户名/密码)进行身份验证,他的订购部件授权已得到验证,并且他颁发了一个生存期较短的 SAML 令牌,其中包含相应的声明,并由上面决定的 X.509 证书签名。 然后,订购应用程序的部件会联系 Contoso 服务,提供颁发的 SAML 令牌,以进行身份验证和执行排序任务。
在这里,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 终结点地址。 客户端应用程序可以使用以下任一技术来确定此信息:
- 将应用程序中的信息硬编码为设计时决策的一部分。
- 从本地应用程序部署程序设置的应用程序级别配置文件中读取此信息。
- 使用具有 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 语法 部分。