WCF: la demande de token de sécurité n'a pas pu être satisfaite car l'authentification a échoué

j'ai écrit un Service WCF très simple qui envoie et reçoit des messages. J'ai testé l'application via le serveur web par défaut VS 2008 et tout fonctionne très bien. Mais lorsque je déploie le service WCF sur un autre ordinateur, je reçois l'erreur suivante:

"la requête pour le token de sécurité n'a pas pu être satisfaite car l'authentification a échoué."

comment définir le type d'authentification pour utiliser mon nom d'utilisateur personnalisé et mon mot de passe dans la configuration fichier? Si ce n'est pas possible, s'il vous plaît me dire comment je peux configurer ses justificatifs d'identité windows parce que les 2 ordinateurs que j'utilise, ne partagent pas les mêmes utilisateurs.

25
demandé sur skaffman 2008-12-27 12:19:30

4 réponses

Vous devez désactiver la sécurité de la liaison. Sinon, je pense que, par défaut, le wsHttpBinding tentera de négocier un jeton de contexte de sécurité (SCT).

donc, Modifiez la définition du point final pour pointer vers une section de configuration liant. Voici un exemple:

<endpoint address="" 
          binding="wsHttpBinding" 
          contract="HelloWorldService.IService1"
          bindingConfiguration="TheBindingConfig">

et ensuite ajouter quelque chose comme la configuration de liaison suivante juste après le <services> section dans le site web.config <system.serviceModel> section.

<bindings>
  <wsHttpBinding>
    <binding name="TheBindingConfig">
      <security mode="None" />
    </binding>
  </wsHttpBinding>
</bindings>

configuration de la sécurité "Aucun" est la clé.

Espère que cela a aidé!


ce qui précède m'a aidé - mais ce qui n'est pas immédiatement évident, c'est comment ajouter à la service fin (c'est clair une fois que vous l'avez fait ce qui est nécessaire, mais pas tant que vous ne l'avez pas fait). La raison ses pas totalement évident est parce qu'il n'existe pas de liaisons section par défaut alors qu'il est responsable dans le client.

Donc, pour être très clair à la fin des services, ajouter les liaisons section (comme détaillé ci-dessus) et ensuite au point final approprié Ajouter l'attribut bindingconfig="TheBindingConfig". C'est évident une fois que tu l'as fait une fois...

31
répondu Mark 2010-02-10 13:45:41

Vous n'avez pas besoin de désactiver la sécurité et dans certains cas, vous ne devriez pas. Dans une configuration bindingConfiguration, vous pouvez spécifier un niveau de sécurité de message qui n'établit pas un contexte de sécurité comme suit:

<security mode="Message">
    <transport clientCredentialType="Windows" proxyCredentialType="None"
                        realm="" />
    <message clientCredentialType="Windows" negotiateServiceCredential="true"
        algorithmSuite="Default" establishSecurityContext="false" />
</security>

notez l'attribut establishSecurityContext. Le client et le service devraient tous deux avoir une configuration de sécurité avec establishSecurityContext réglé à la même valeur. Une valeur de true fonctionne aussi bien mais false est recommandé dans un environnement où les serveurs sont d'équilibrage de charge.

20
répondu Frank Sampson 2010-05-18 19:36:37

assurez-vous de mettre ceci bindingConfiguration (spécifiant le mode de sécurité 'none') sur client et serveur ou bien vous obtiendrez ce message - qui est tout à fait une diversion en ce qui concerne le débogage du problème.

Le message n'a pas pu être traitée. C'est probablement parce que l'action 'http://tempuri.org/IInterfaceName/OperationName