9
votes

(401) Erreur non autorisée: Sécurité / liaison de la WCF

J'ai un service Web WCF et un client à la fois sur la même machine. Accéder directement au service Web WCF à l'aide des travaux du navigateur, mais le client ne peut pas se connecter; Message d'erreur ci-dessous. Des idées? L'authentification Windows intégrée dans IIS est utilisée pour le client et le serveur.

<system.serviceModel>
   <bindings> 
      <basicHttpBinding> 
         <binding name="basicBinding"> 
            <security mode="TransportCredentialOnly">
                <transport clientCredentialType="Windows" 
                           proxyCredentialType="Windows" realm="" />
                <message clientCredentialType="UserName" 
                         algorithmSuite="Default" />
            </security> 
         </binding> 
      </basicHttpBinding> 
   </bindings> 
   <client>
       <endpoint 
           address="http://hrpaysservice/service1.svc" 
           binding="basicHttpBinding"
           bindingConfiguration="basicBinding" 
           contract="HRPaysService.IService1">
       </endpoint>
</client>
</system.serviceModel>


1 commentaires

Votre client est-il une application Silverlight par hasard ?? Ceux-ci fonctionnent assez différemment d'une application ASP.NET ou WINFORMS / WPF.


4 Réponses :


0
votes

Avez-vous un document CrossDomain.xml configuré dans votre application Web Services? Sinon, créez-en un avec le contenu suivant -

<?xml version="1.0"?>
<!DOCTYPE cross-domain-policy SYSTEM "http://www.macromedia.com/xml/dtds/cross-domain-policy.dtd">
<cross-domain-policy>
    <allow-http-request-headers-from domain="*" headers="*"/>
</cross-domain-policy>


1 commentaires

Disons que votre service est sur abc.com et que vous appelez un appel de client sur xyz.com, voici donc un appel vient de xyz.com à un autre domaine abc.com. Ceci est un problème de cross-domaine et pour résoudre nous devons créer un crossdomain.xml et mettre au-dessus du code et mettre ce fichier dans votre dossier bin de votre hôte de service dans ABC.com Server.



1
votes

Client: xxx

serveur: xxx


1 commentaires

Pourquoi cela résoudra-t-il le problème? Qu'avez-vous changé?



0
votes

Si le répertoire virtuel des services WCF n'est pas configuré pour un accès anonyme, le point final "MEX" doit être supprimé.

Vous avez posté 2 séries de configs différents et il semble y avoir une inadéquation. Pourriez-vous publier les configurations qui causent l'erreur?

Votre premier (haut la plupart) Config client et la dernière configuration du serveur (sans la partie MEX) devrait fonctionner.


0 commentaires

5
votes

J'ai rencontré la même erreur lorsque j'ai essayé d'accéder à un service WCF hébergé sur IIS en ajoutant un " référence de service em>" à mon application Windows Formulaires. Mais lorsque le client a appuyé sur une méthode de service, j'ai eu une "exception non autorisée 401". Voici ma solution à ce problème:

(1) J'utilisais [WSHTTPTTPLINDING] Switch to Be [BasichttpLinding] comme suit dans le fichier de configuration du service WCF: P>

        ProxyClassName.MyServiceName srv = new ProxyClassName.MyServiceName("default");
 //default is the name of the endpoint in the app.config file as we did.
    srv.ClientCredentials.Windows.AllowedImpersonationLevel = System.Security.Principal.TokenImpersonationLevel.Impersonation;


2 commentaires

Merci pour votre réponse. Le code à l'étape (4) est destiné à imiter l'authentification Windows actuelle, qui tombe en ligne avec la question initiale. Cependant, je cherchais à accéder à un service de WCF distant; Votre client configurie a fonctionné bien, mais le code a été modifié pour utiliser autoraimpompersonationVelvel = tokenimposteonationlel.délégation et réglage srv.clientcredentials.windows.clientcredential.domain / .Asername / .password sur les valeurs appropriées.


Après avoir essayé d'obtenir Wshttpbinding de travailler après plusieurs heures, j'ai finalement abandonné cette suggestion et j'ai enfin eu le service de travailler. J'aimerais savoir ce qui ne va pas mal avec WshttpLinding, car je comprends, cela ne devrait pas avoir de problèmes.