web-dev-qa-db-fra.com

La requête HTTP n'est pas autorisée avec le schéma d'authentification client 'Anonymous'. L’en-tête d’authentification reçu du serveur était 'NTLM ’

J'ai une application Web ASP.NET écrite en VB.NET. Une partie de l'application effectue un appel AJAX vers un fichier ASMX interne qui, à son tour, appelle un service Web distant qui n'est qu'un fichier ASMX. Normalement, cela fonctionne bien et a été déployé plusieurs fois et fonctionne bien. Cependant, un client reçoit le message de l'appel AJAX: 

La demande HTTP n'est pas autorisée avec le schéma d'authentification du client 'Anonyme'. L'en-tête d'authentification reçu du serveur était 'NTLM ’.

J’ai parcouru un grand nombre de sites Web pour tenter de résoudre ce problème, mais je n'arrive pas à trouver la réponse qui me convienne.

J'ai été incapable de répliquer l'erreur sur mon serveur de test, qui est identique à celui du client, Win2003 IIS6.

Le service Web distant est déployé sous Windows 2008 R2 - IIS7.5. Le service distant est déployé en utilisant l’authentification ‘Anonymous’ uniquement. Le déploiement du client est configuré avec une authentification anonyme et intégrée de Windows. J'ai essayé de modifier les niveaux d'authentification sur les deux implémentations mais je ne peux pas reproduire le problème. Le plus proche que je sois arrivé est lorsque je configure l'authentification du service distant IIS sur 

La demande HTTP n'est pas autorisée avec le schéma d'authentification du client 'Ntlm'. L'en-tête d'authentification reçu du serveur était ''.

Dans le fichier web.config, la référence au service distant est la suivante:

<system.serviceModel>
    <bindings>
        <basicHttpBinding>
            <binding name="SVCMappingSoap" closeTimeout="00:01:00" openTimeout="00:01:00" receiveTimeout="00:10:00" sendTimeout="00:01:00" allowCookies="false" bypassProxyOnLocal="false" hostNameComparisonMode="StrongWildcard" maxBufferSize="65536" maxBufferPoolSize="524288" maxReceivedMessageSize="65536" messageEncoding="Text" textEncoding="utf-8" transferMode="Buffered" useDefaultWebProxy="true">
                <readerQuotas maxDepth="32" maxStringContentLength="8192" maxArrayLength="16384" maxBytesPerRead="4096" maxNameTableCharCount="16384"/>
                <security mode="None">
                    <transport clientCredentialType="None" proxyCredentialType="None" realm=""/>
                    <message clientCredentialType="UserName" algorithmSuite="Default"/>
                </security>
            </binding>
        </basicHttpBinding>
    </bindings>
    <client>
        <endpoint address="http://svc.website.com/services/myService.asmx" binding="basicHttpBinding" bindingConfiguration="SVCMappingSoap" contract="SVCMappingService.SVCMappingSoap" name="SVCMappingSoap"/>
    </client>
</system.serviceModel>

J'ai essayé de modifier un certain nombre de paramètres dans la section <security> mais je ne parviens toujours pas à répliquer.

12
SausageFingers

Je ne suis pas sûr de la configuration totale de votre serveur. 

<security mode="None">
  <transport clientCredentialType="None" proxyCredentialType="None"    realm=""/>
</security>

au lieu de la précédente, veuillez essayer avec la configuration ci-dessous

<security mode="TransportCredentialOnly">
    <transport clientCredentialType="Ntlm"/>
    <message clientCredentialType="UserName" algorithmSuite="Default"/>
</security>

veuillez passer par les liens ci-dessous, vous pouvez avoir une idée plus large de ceux-ci et vous pouvez modifier la configuration en fonction de vos besoins:

19
himanshu

J'ai dû changer la valeur par défaut générée

      <security mode="Transport"/>

dans 

      <security mode="Transport" >
        <transport clientCredentialType="Ntlm"/>
      </security>
2
Jeroen K

Encore un commentaire pour ce problème:

Si vous n'utilisez pas HTTPS, 

<security mode="Transport"/>

n'est pas pris en charge. Vous pouvez utiliser 

<security mode="TransportCredentialOnly">

au lieu.

0
Soyokaze