2010-08-08 3 views
5

Avec presque tous les points de terminaison de service WCF (sécurisés) dans mon application, si l'horloge système du client est trop éloignée dans le futur, j'obtiens une exception du mécanisme Clock Skew de WCF (décrit ici: http://www.danrigsby.com/blog/index.php/2008/08/26/changing-the-default-clock-skew-in-wcf/).Pourquoi mon point de terminaison WCF ne lance-t-il pas une exception Max Clock Skew?

Cependant une extrémité sur lequel mon login() est mis en œuvre jette jamais cette exception même si elle a la sécurité du transport activé (naturellement aucune information d'identification sont nécessaires pour cela).

Pourquoi le "mécanisme de décalage d'horloge" ne fonctionne-t-il pas pour ce point de terminaison? Peut-être parce que clientCredentialType est défini sur "None"?

À titre d'exemple, voici une version simplifiée de ma configuration:

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

Répondre

2

Le mode de sécurité - mode sécurité = « Transport » - ne comprend pas l'horodatage dans le message qui provoque la validation MaxClockSkew pour ignorer le message et non jette une exception de sécurité. Modifiez le mode de sécurité en mode de sécurité = "TransportWithMessageCredential" qui inclut des horodatages et autorisez la validation MaxClockSkew à tester le message de delta temporel.

1

D'autres personnes ont un problème similaire:

Triggering MaxClockSkew when accessing WCF service

Je ne pense donc pas que ce soit un problème votre configuration

Il semble que si elle ne pas utiliser le temps de la machine, il ne vérifie pas s'il y a une différence de temps entre les machines.

Vous pouvez programmer votre chemin autour, envoyez le temps de la machine client en tant que paramètre dans votre méthode de connexion, si elle est différente, jeter une exception.

Questions connexes