2010-08-08 10 views
5

Con quasi tutti gli endpoint del servizio WCF (sicuri) nella mia applicazione, se l'orologio del sistema del client è impostato troppo lontano nel futuro o passato, ottengo un'eccezione dal meccanismo di sgancio dell'orologio di WCF (descritto qui: http://www.danrigsby.com/blog/index.php/2008/08/26/changing-the-default-clock-skew-in-wcf/).Perché il mio endpoint WCF non emette un'eccezione Max Clock Skew?

Tuttavia, l'endpoint in cui viene implementato il metodo Login() non getta mai questa eccezione nonostante abbia abilitato la sicurezza di trasporto (naturalmente non sono necessarie credenziali per esso).

Perché il meccanismo di "Clock Skew" non funziona per questo endpoint? Forse è perché clientCredentialType è impostato su "Nessuno"?

A titolo di esempio, ecco una versione semplificata della mia configurazione:

<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>  

risposta

2

La modalità di protezione - modalità di sicurezza = "Trasporto" - non include il timestamp nel messaggio che causa la convalida di MaxClockSkew per ignorare il messaggio e non genera un'eccezione di sicurezza. Cambia la modalità di sicurezza in modalità sicurezza = "TransportWithMessageCredential" che include i timestamp e consente la convalida MaxClockSkew per testare il messaggio per il delta temporale.

1

Altre persone hanno un problema simile:

Triggering MaxClockSkew when accessing WCF service

Quindi non credo che sia un problema con la tua configurazione

Sembra che, se non utilizza il tempo della macchina, non controlla se c'è una differenza di tempo tra le macchine.

È possibile programmare il percorso, inviare l'ora della macchina client come parametro nel metodo di accesso, se è diverso, generare un'eccezione.

Problemi correlati