2010-08-08 12 views
5

Con casi todos los puntos finales de servicio (seguros) WCF en mi aplicación, si el reloj del sistema del cliente está configurado demasiado lejos en el futuro o en el pasado, recibo una excepción del mecanismo Clock Skew de WCF (descrito aquí: http://www.danrigsby.com/blog/index.php/2008/08/26/changing-the-default-clock-skew-in-wcf/).¿Por qué mi punto extremo WCF no lanza una excepción Max Clock Skew?

Sin embargo, el punto final donde se implementa mi método Login() nunca arroja esta excepción aunque tenga habilitada la seguridad de transporte (naturalmente, no se requieren credenciales para ello).

¿Por qué el "Mecanismo de reloj sesgado" no funciona para este punto final? ¿Tal vez es porque clientCredentialType está establecido en "Ninguno"?

A modo de ejemplo, he aquí una versión simplificada de la configuración de mi:

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

Respuesta

2

El modo de seguridad - modo de seguridad = "Transporte" - no incluye marca de tiempo en el mensaje que causa que la validación de MaxClockSkew ignore el mensaje y no arroje una excepción de seguridad. Cambia el modo de seguridad a modo de seguridad = "TransportWithMessageCredential" que incluye marcas de tiempo y permite la validación de MaxClockSkew para probar el delta del tiempo.

1

Otras personas tienen un problema similar:

Triggering MaxClockSkew when accessing WCF service

Así que no creo que es un problema tu configuración

Parece ser que, si no utiliza el tiempo de la máquina, no verifica si hay una diferencia de tiempo entre las máquinas.

Puede programar su camino alrededor, enviar la hora de la máquina cliente como un parámetro en su método de inicio de sesión, si es diferente, lanzar una excepción.

Cuestiones relacionadas