2009-09-11 7 views
0

Chaque fois que je tente de consommer mon service Web via WCF, je reçois cette erreur:Une autre - requête HTTP est une erreur non autorisée

The HTTP request is unauthorized with client authentication scheme 'Negotiate'. The authentication header received from the server was 'Negotiate,NTLMnProviders'. 

Je sais que j'ai installé Kerberos correctement pour cet environnement (qu'il appelle les services SharePoint 3.0 qui J'utilise dans d'autres applications). La sécurité intégrée de Windows a fonctionné très bien mais c'est la première fois que j'ai essayé de le consommer par le biais de WCF.

Je suis passé par ce site plusieurs fois pour m'assurer que j'ai le bon en-tête. L'erreur ci-dessus échoue-t-elle parce qu'elle s'attend à "Négocier" mais qu'elle reçoit "Négocier, NTLMnProviders"? Je sais que je peux changer mes en-têtes à travers ce site mais il a toujours 'Négocier, NTLMnProviders' pour l'en-tête Kerberos. Quelqu'un a une idée?

+0

nous montrer votre service et config client !! Quelle liaison utilisez-vous? Quels paramètres de sécurité? Nous ne pouvons pas répondre à quelque chose comme ça sans cette information pertinente ....... –

Répondre

0

Pas vraiment une réponse, mais voici quelques détails ...

<system.serviceModel> 
    <bindings> 
     <basicHttpBinding> 
     <binding name="ListsSoap"> 
      <security mode="TransportCredentialOnly"> 
      <transport clientCredentialType="Windows" proxyCredentialType="Windows"/> 
      </security>   
     </binding> 
     <binding name="SiteDataSoap"> 
      <security mode="TransportCredentialOnly"> 
      <transport clientCredentialType="Windows" proxyCredentialType="Windows"/> 
      </security> 
     </binding> 
     </basicHttpBinding> 
    </bindings> 
    <client> 
     <endpoint address="http://something.com/_vti_bin/lists.asmx" 
      binding="basicHttpBinding" bindingConfiguration="ListsSoap" 
      contract="WSS_Server.ListsSoap" name="ListsSoap"> 
     <identity> 
      <dns value="localhost" /> 
     </identity> 
     </endpoint> 
     <endpoint address="http://something.com/_vti_bin/SiteData.asmx" 
      binding="basicHttpBinding" bindingConfiguration="SiteDataSoap" 
      contract="WSS_Server_SiteData.SiteDataSoap" name="SiteDataSoap"> 
     <identity> 
      <dns value="localhost" /> 
     </identity> 
     </endpoint> 
    </client> 
    </system.serviceModel> 

Et puis j'instanciation ma procuration et d'appeler cela dans le code ...

proxy.ClientCredentials.Windows.AllowedImpersonationLevel = 
       System.Security.Principal.TokenImpersonationLevel.Impersonation; 

proxy.ClientCredentials.Windows.AllowNtlm = false; 

// Web service call 
proxy.GetWeb(...); 
Questions connexes