联盟和信任

本主题介绍与联合应用程序、信任边界和配置以及 Windows Communication Foundation(WCF)中颁发的令牌的使用相关的各种方面。

服务、安全令牌服务和信任

公开联合终结点的服务通常要求客户端使用特定颁发者提供的令牌进行身份验证。 为颁发者配置服务时,必须配置正确的凭据;否则,它将无法通过颁发的令牌验证签名,客户端将无法与服务通信。 有关在服务上配置颁发者凭据的详细信息,请参阅 如何:在联合身份验证服务上配置凭据

同样,使用对称密钥时,会为目标服务加密密钥,因此必须使用目标服务的正确凭据配置安全令牌服务;否则,它将无法对目标服务的密钥进行加密,并且客户端将无法与服务通信。

WCF 服务使用 MaxClockSkewSecurityBindingElement 上的属性值来允许客户端和服务之间的时钟偏差。 在联合中,MaxClockSkew 设置应用于客户端与客户端从中获得颁发的令牌的安全令牌服务之间的时钟偏差。 因此,在设置已颁发的令牌的有效和过期时间时,安全令牌服务不需要进行时钟偏差调整。

注释

随着已颁发令牌的生命周期缩短,时钟偏差的重要性会增加。 在大多数情况下,如果令牌生存期为 30 分钟或更多,则时钟倾斜并不是一个重要问题。 具有较短生存期或令牌有效时间至关重要的方案需要设计以考虑时钟偏差。

联合终结点和超时

客户端与联合终结点通信时,必须先从安全令牌服务获取适当的令牌。 如果安全令牌服务公开联合终结点,客户端必须先从该终结点的颁发者处获取令牌。 每次获得令牌都需要时间,而时间取决于向最终终结点发送实际消息的整体超时。

例如,客户端通道的超时值设置为 30 秒。 在将消息发送到最终终结点之前,需要调用两个令牌颁发者来检索令牌,每个颁发令牌需要 15 秒。 这种情况下,尝试将失败,并引发 TimeoutException。 因此,需要将 OperationTimeout 客户端通道上的值设置为足够大的值,以包含检索所有颁发的令牌所需的时间。 如果未为 OperationTimeout 属性指定值, OpenTimeout 则需要将属性或 SendTimeout 属性(或两者)设置为足够大的值,以包含检索所有已颁发令牌所需的时间。

令牌生存期和续订

WCF 客户端在向服务发出初始请求时不检查颁发的令牌。 相反,WCF 信任安全令牌服务来颁发具有适当生效时间和过期时间的令牌。 如果令牌由客户端缓存并重复使用,则会在后续请求上检查令牌生存期,并在必要时客户端自动续订令牌。 有关令牌缓存的详细信息,请参阅 如何:创建联合客户端

如果为颁发的令牌或安全上下文令牌指定较短的生存期(30 秒左右或更短),则可能在请求颁发的令牌或者协商或续订安全上下文令牌时导致 WCF 客户端引发协商超时或其他异常。

颁发的令牌和 InclusionMode

在从客户端发送到联合终结点的消息中,是否对颁发的令牌进行序列化,是由 InclusionMode 类的 SecurityTokenParameters 属性的设置控制的。 此属性可以设置为枚举值之一 SecurityTokenInclusionMode ,但在大多数联合方案中它并不有用。 如果是 SecurityTokenInclusionMode.NeverSecurityTokenInclusionMode.AlwaysToInitiator 值,客户端会向安全令牌服务颁发给依赖方的令牌发送一个引用。 除非信赖方拥有颁发的令牌的副本,否则身份验证将失败,因为令牌引用不可解析。 WCF 被视为 SecurityTokenInclusionMode.Once 等效于 SecurityTokenInclusionMode.AlwaysToRecipient.

另请参阅