2010-08-08 35 views
5

在我的應用程序中幾乎所有的(安全的)WCF服務端點,如果客戶端的系統時鐘在未來或過去設置得太遠,我會從WCFs時鐘偏移機制(這裏描述:http://www.danrigsby.com/blog/index.php/2008/08/26/changing-the-default-clock-skew-in-wcf/)中得到一個例外。爲什麼我的WCF端點沒有引發最大時鐘偏移異常?

但是,實現Login()方法的一個端點即使啓用了傳輸安全性(自然不需要證書),也不會拋出此異常。

爲什麼「時鐘扭曲機制」不適用於該端點?也許這是因爲clientCredentialType設置爲「無」?

作爲一個例子,這是我配置的簡化版本:

<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

安全模式 - 安全模式=「傳輸」 - 不包括郵件中的時間戳,這會導致MaxClockSkew驗證忽略消息並且不會引發安全異常。 將安全模式更改爲安全模式=「TransportWithMessageCredential」,其中包含時間戳,並允許MaxClockSkew驗證測試消息的時間增量。

1

其他人有類似的問題:

Triggering MaxClockSkew when accessing WCF service

所以我不認爲這是一個問題你的配置。

它似乎是,如果它不使用機器時間,它不檢查機器之間是否有時間差異。

你可以用它來編程,發送客戶機時間作爲你登錄方法中的一個參數,如果它不同,則拋出一個異常。

相關問題