为什么我的WCF端点没有抛出Max Clock Skew异常?

时间:2010-08-08 11:17:45

标签: wcf wcf-security

在我的应用程序中几乎所有(安全)WCF服务端点,如果客户端的系统时钟在将来或过去设置得太远,我会从WCFs Clock Skew机制中获得异常(如下所述:{{3} })。

然而,实现我的Login()方法的一个端点永远不会抛出此异常,即使它启用了传输安全性(当然也不需要凭据)。

为什么“时钟偏差机制”不适用于此端点?也许是因为clientCredentialType设置为“None”?

举个例子,这是我的配置的简化版本:

<services>
    <service name="Foo">
        <endpoint address=""
            binding="wsHttpBinding"
            bindingConfiguration="binding1"
            contract="IFoo" />
    </service>
</services>

<bindings>
    <wsHttpBinding> 
        <binding name="binding1" maxReceivedMessageSize="100000000">
            <readerQuotas maxDepth="1000000000" maxArrayLength="1000000000" maxStringContentLength="1000000000" />
            <security mode="Transport">
                <transport clientCredentialType ="None"/>
            </security>
            <reliableSession enabled="false" />
        </binding>
    </wsHttpBinding>    
</bindings>     

2 个答案:

答案 0 :(得分:2)

安全模式 - 安全模式=“传输” - 消息中不包含时间戳,该时间戳会导致MaxClockSkew验证忽略该消息而不会引发安全性异常。 将安全模式更改为安全模式=“TransportWithMessageCredential”,其中包括时间戳,并允许MaxClockSkew验证测试消息的时间增量。

答案 1 :(得分:1)

其他人有类似的问题:

Triggering MaxClockSkew when accessing WCF service

所以我认为你的配置不存在问题。

似乎是,如果它不使用机器时间,它不会检查机器之间是否存在时间差异。

您可以自己编程,在登录方法中将客户机时间作为参数发送,如果不同则抛出异常。