Erreur WCF: l'appelant n'a pas été authentifié par le service

j'essaie d'accéder à mon service WCF sur un serveur à partir de mon application client console pour tester. J'obtiens l'erreur suivante:

L'appelant n'a pas été authentifié par le service

j'utilise wsHttpBinding. Je ne suis pas sûr du type d'authentification que le service attend?





<behaviors>
  <serviceBehaviors>
    <behavior name="MyTrakerService.MyTrakerServiceBehavior">
      <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment -->
      <serviceMetadata httpGetEnabled="true"/>
      <!-- To receive exception details in faults for debugging purposes, set the value below to true.  Set to false before deployment to avoid disclosing exception information -->
      <serviceDebug includeExceptionDetailInFaults="false"/>
    </behavior>
  </serviceBehaviors>
</behaviors>

mise à Jour Cela fonctionne si je change ma reliure à <endpoint "basicHttpBinding" ... /> (à partir de wsHttpBinding) sur le serveur IIS 7.0, windows 2008 server

42
demandé sur Michael Kniskern 2008-11-12 19:38:44

11 réponses

si vous utilisez basicHttpBinding, configurez le paramètre de sécurité à "None "et transportez clientCredintialType à" None."

<bindings>
    <basicHttpBinding>
        <binding name="MyBasicHttpBinding">
            <security mode="None">
                <transport clientCredentialType="None" />
            </security>
        </binding>
    </basicHttpBinding>
</bindings>
<services>
    <service behaviorConfiguration="MyServiceBehavior" name="MyService">
        <endpoint 
            binding="basicHttpBinding" 
            bindingConfiguration="MyBasicHttpBinding"
            name="basicEndPoint"    
            contract="IMyService" 
        />
</service>

en outre, assurez - vous que les méthodes d'authentification de répertoire dans IIS pour permettre L'accès anonyme

25
répondu Michael Kniskern 2009-02-25 23:57:21

je l'ai eu.

si vous voulez utiliser wshttpbinding, vous devez ajouter les identifiants de windows comme ci-dessous.

svc.ClientCredentials.Windows.ClientCredential.UserName = "abc";
svc.ClientCredentials.Windows.ClientCredential.Password = "xxx";

merci

23
répondu Earlz 2011-02-07 19:08:05

avez-vous essayé d'utiliser basicHttpBinding au lieu de wsHttpBinding? Si vous n'avez pas besoin d'authentification et que les implémentations Ws-* ne sont pas nécessaires, vous seriez probablement mieux avec une simple reliure basicHttpBinding. WsHttpBinding implémente WS-Security pour la sécurité et l'authentification des messages.

4
répondu kd7 2008-11-12 18:04:27

définir l'accès anonyme dans votre répertoire virtuel

écrire les informations d'identification suivantes à votre service

ADTService.ServiceClient adtService = new ADTService.ServiceClient();
adtService.ClientCredentials.Windows.ClientCredential.UserName="windowsuseraccountname";
adtService.ClientCredentials.Windows.ClientCredential.Password="windowsuseraccountpassword";
adtService.ClientCredentials.Windows.ClientCredential.Domain="windowspcname";

après cela vous appelez vos méthodes de webservice.

1
répondu kishore 2012-06-17 15:54:30

si vous utilisez un site auto-hébergé comme moi, la façon d'éviter ce problème (tel que décrit ci-dessus) est de stipuler à la fois du côté hôte et du côté client que le mode de sécurité wsHttpBinding = NONE.

Lors de la création de la liaison, à la fois sur le client et l'hôte, vous pouvez utiliser ce code:

 Dim binding as System.ServiceModel.WSHttpBinding 
 binding= New System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None)

ou

 System.ServiceModel.WSHttpBinding binding
 binding = new System.ServiceModel.WSHttpBinding(System.ServiceModel.SecurityMode.None);
1
répondu Brian 2013-11-04 13:57:41

nous avons rencontré un problème étrange où le dossier dans lequel le service WCF était hébergé avait des permissions qui causaient le problème.

1
répondu TruthOf42 2013-11-04 16:25:55

j'ai pu résoudre le problème en suivant les étapes suivantes:

  1. Aller dans IIS--> Sites-->Votre Site-->
  2. Volet Affichage Des Fonctionnalités-->Authentification
  3. Set Authentification AnonymeDésactivé
  4. Set Authentification WindowsActivé

enter image description here

1
répondu Ajay Shankar 2016-04-07 22:12:01

si nécessaire pour spécifier le domaine (qui autorise le nom d'utilisateur et le mot de passe que le client utilise) dans webconfig vous pouvez mettre cela dans le système.serviceModel services section de service:

<identity>          
<servicePrincipalName value="example.com" />
</identity>

et dans le client spécifier le domaine, le nom d'utilisateur et le mot de passe:

 client.ClientCredentials.Windows.ClientCredential.Domain = "example.com";
 client.ClientCredentials.Windows.ClientCredential.UserName = "UserName ";
 client.ClientCredentials.Windows.ClientCredential.Password = "Password";
0
répondu farhang67 2016-02-27 09:55:13

Cela peut être causé si le client est dans un autre domaine que le serveur.

j'ai rencontré ce problème en testant une de mes applications depuis mon PC(client) vers mon serveur de Test (cloud) et la solution la plus simple que j'ai pu imaginer était de configurer un vpn.

0
répondu yiannis 2016-05-17 04:22:52

j'ai aussi eu le même problème wsHtppBinding. Et j'ai juste eu à ajouter none, qui a résolu mon problème et pas besoin de passer à basicHttpBinding. Voir Ici et vérifiez comment désactiver la sécurité WCF. Vérifiez le changement de configuration ci-dessous pour référence:

<wsHttpBinding>
    <binding name="soapBinding">
        <security mode="None">
            <transport clientCredentialType="None" />
            <message establishSecurityContext="false" />
        </security>
    </binding>
</wsHttpBinding>
0
répondu Nani 2018-07-19 06:26:49

pourquoi ne pouvez-vous pas simplement supprimer le paramètre de sécurité pour wsHttpBinding ("none" au lieu de "message" ou "transport")?

-1
répondu Can Bilgin 2011-09-06 11:46:36