De sécurité non valide jeton de contexte lors de l'utilisation de WCF avec un équilibrage de Charge (AWS)
J'ai une application WCF est hébergé sur AWS. Pour parvenir à une plus grande disponibilité, j'ai créé un instantané de la WCF de la machine et de lancer un autre exemple avec cette image.
Aussi, j'ai créé un Élastique à l'Équilibre de la Charge (ELB) qui achemine les demandes pour ces 2 serveurs.
Avec mon WCF Client, je peux réussir à se connecter avec les deux serveurs si j'utilise la machine d'adresse IP publique. Mais si j'utilise l'ELB nom d'hôte, ma connexion échoue avec l'erreur suivante:
Système.ServiceModel.FaultException: Le message n'a pas pu être
transformés. C'est probablement parce que l'action
'http://tempuri.org/IService/GetCustomerData"est incorrect ou que
le message contient pas valide ou a expiré contexte de sécurité ou jeton
car il existe une incompatibilité entre les liaisons. Le contexte de sécurité
jeton serait pas valide si le service interrompu le canal en raison de
l'inactivité. Pour empêcher le service de l'abandon des sessions inactives
prématurément augmenter le délai de réception (sur le point de terminaison du service de l'
de liaison.
L'erreur suggère que j'ai un pas valide ou a expiré jeton de sécurité. Donc, j'ai vérifié l'Envoyer et de Recevoir de délai d'attente et c'est déjà réglé sur 10 minutes: sendTimeout="00:10:00"
, receiveTimeout="00:10:00"
(les demandes prend habituellement de 5 à 15 secondes)
Mon biding configuration:
<bindings>
<wsHttpBinding>
<binding name="wsHttpBinding" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:10:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" useDefaultWebProxy="true">
<reliableSession ordered="true" inactivityTimeout="00:10:00" enabled="false" />
<security mode="TransportWithMessageCredential">
<transport clientCredentialType="Basic"/>
<message clientCredentialType="UserName"/>
</security>
</binding>
</wsHttpBinding>
</bindings>
Aussi, j'ai vérifié:
- ELB et des machines de Pare-feu sont ouverts sur les ports 80 et 443.
- Mon ELB a été configuré avec le certificat correct et a une écoute sur le port 443.
- J'ai un Serveur Web IIS sur les deux machines. Si j'utilise la ELB adresse, tout fonctionne.
- Si la ELB routes à une seule machine, WCF œuvres. Si les routes à deux machines, WCF échoue.
OriginalL'auteur Zanon | 2014-08-23
Vous devez vous connecter pour publier un commentaire.
J'ai réussi à résoudre ce problème en ajoutant le paramètre suivant:
establishSecurityContext="false"
.Recherche sur google, j'ai appris que:
Lorsque cette valeur est définie pour faux, l'échange de clés et de validation doit être fait par appel à l'aide d'un chiffrement asymétrique. La valeur par défaut de ce paramètre est vrai et cela signifie que le premier appel de créer un contexte de sécurité avec le cryptage asymétrique, mais il sera mis en cache et autres appels utilisera uniquement de chiffrement symétrique, qui est plus rapide.
Facteur de Performance: Yaron Naveh
Lorsque le client est tenu de faire beaucoup d'appels dans la succession, il est préférable de régler ce paramètre à vrai, MAIS avec un équilibrage de Charge, les appels sont acheminés vers différents serveurs et cela rompt avec le message grâce à invalid token. Donc, vous devez désactiver ce Contexte de Sécurité, de fonctionnalité.
Explication détaillée dans Établir le Contexte de la Sécurité section: https://msdn.microsoft.com/en-us/library/hh273122(v=vs. 100).aspx
OriginalL'auteur Zanon
Basé sur votre déclaration que vous avez le bon certificat installé sur le ELB, je suis en supposant que vous utilisez le déchargement SSL. Cela peut être un problème, comme la liaison de client doit être configuré à l'aide de la sécurité des transports, mais le service sera à la réception de la demande sur le port 80, donc il aurait besoin d'une autre configuration de liaison.
Cependant, le FMC exige de la sécurité des transports lorsque vous spécifiez les informations d'identification du client, de sorte que vous peut-être désactiver le déchargement SSL si vous avez besoin d'envoyer des informations d'identification du client.
OriginalL'auteur dan nicholson