WCF - Authentification Windows - Les paramètres de sécurité nécessitent une connexion anonyme.

StackOverflow https://stackoverflow.com/questions/1026855

  •  06-07-2019
  •  | 
  •  

Question

Je ne parviens pas à faire fonctionner le service WCF sur IIS sur notre serveur. Après le déploiement, je reçois un message d'erreur:

Les paramètres de sécurité de ce service requièrent une authentification "anonyme", mais elle n'est pas activée pour l'application IIS hébergeant ce service.

Je souhaite utiliser l'authentification Windows et l'accès anonyme est donc désactivé. Notez également qu’il existe aspNetCompatibilityEnabled (si cela fait une différence).

Voici mon web.config:

<system.serviceModel>
    <serviceHostingEnvironment aspNetCompatibilityEnabled="true" />
    <bindings>
        <webHttpBinding>
            <binding name="default">
                <security mode="TransportCredentialOnly">
                    <transport clientCredentialType="Windows" proxyCredentialType="Windows"/>
                </security>
            </binding>
        </webHttpBinding>
    </bindings>
    <behaviors>
        <endpointBehaviors>
            <behavior name="AspNetAjaxBehavior">
                <enableWebScript />
                <webHttp />
            </behavior>
        </endpointBehaviors>
        <serviceBehaviors>
            <behavior name="defaultServiceBehavior">
                <serviceMetadata httpGetEnabled="true" httpsGetEnabled="false" />
                <serviceDebug includeExceptionDetailInFaults="true" />
                <serviceAuthorization principalPermissionMode="UseWindowsGroups" />
            </behavior>
        </serviceBehaviors>
    </behaviors>
    <services>
        <service name="xxx.Web.Services.RequestService" behaviorConfiguration="defaultServiceBehavior">
            <endpoint behaviorConfiguration="AspNetAjaxBehavior" binding="webHttpBinding"
             contract="xxx.Web.Services.IRequestService" bindingConfiguration="default">
            </endpoint>
            <endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>
        </service>
    </services>
</system.serviceModel>

J'ai cherché partout sur Internet sans succès. Tous les indices sont grandement appréciés.

Était-ce utile?

La solution

Cela semble donc être un problème assez courant. Le but est de supprimer mex de vos liaisons:

<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>

Alternativement, vous activez l'accès anonyme dans IIS et dans votre web.config, vous vous assurez que l'accès anonyme est refusé.

J'espère que cela aidera une autre âme. (J'étais sûr à 100% de l'avoir essayé sans mex.: -O)

Autres conseils

Vous pouvez vérifier cette une . J'ai réussi à le faire fonctionner comme prévu.

<configuration>
  ...
  <system.serviceModel>
    ...
    <bindings>
      <basicHttpBinding>
        <binding>
          <security mode="TransportCredentialOnly">
            <transport clientCredentialType="Windows" />
          </security>
        </binding>
      </basicHttpBinding>
    </bindings>
    ...
  </system.serviceModel>
  ...
</configuration>

utilisez uniquement vos liaisons de service pour mex.

Modifiez donc votre configuration actuelle:

<endpoint address="mex" binding="mexHttpBinding" name="mex" contract="IMetadataExchange"></endpoint>

à

<endpoint address="mex" binding="webHttpBinding" bindingConfiguration="default" name="mex" contract="IMetadataExchange"></endpoint>

Cela devrait résoudre le problème

L'authentification anonyme peut et doit dans certains cas être activée pour le service mais pas pour le site.

Vérifiez donc que le & root; racine " de votre site L'authentification a uniquement l'authentification Windows activée. Développez ensuite votre site, sélectionnez le dossier 'service' et assurez-vous que l'authentification Windows et anonyme est activée sur votre service.

J'avais un environnement identique où cela fonctionnait, la seule différence entre ces environnements était l'authentification du service. Le problème dans mon cas n’a pas été causé par les fournisseurs sélectionnés (Ntlm ou Negotiate), mais par les paramètres d’authentification du site et du service.

Au moins, mon message d’erreur était identique à celui du site Web de base MSSQL Master Data Services & amp; service et c'était la solution. J'ai eu l'erreur en exécutant uniquement le service, mais le site a fonctionné presque correctement. MDS Explorer n'a pas fonctionné car les paramètres d'authentification du service étaient erronés au début. La cause de cette erreur de configuration est peut-être un bogue dans MDS Configuration Manager lors de la création d’un nouveau site MDS?

Donc, dans mon cas, le problème ne devait pas être résolu en effectuant une édition spéciale dans les fichiers web.config ni ApplicationHost.config. Je n'ai pas édité les fichiers de configuration. Il suffit de sélectionner les paramètres d'authentification appropriés pour le site Web et son service dans le gestionnaire IIS. Je ne suis pas sûr que ce soit le cas ici, mais peut-être la peine d'essayer?

Cela a fonctionné pour moi lorsque j'ai supprimé le point de terminaison 'mex' et que j'ai également défini clientCredentialType = 'Ntlm' J'étais en train d'héberger mon WCF dans SharePoint.

Oui, il semble que vous ayez besoin de supprimer complètement le point de terminaison mex. Réglage

<serviceMetadata httpGetEnabled="false"/>

seul n'a pas fonctionné. Merci!

Solution supplémentaire:

Vous devez simplement vous assurer que le nom du service et le contrat sont corrects.

J'espère que cela vous aidera d'une certaine manière.

Il semble que ce problème de liaison MEX ait été résolu dans .NET 4.0. Le passage de la version 2.0 à 4.0 de la version .NET CLR du pool d'applications de notre serveur a permis de résoudre le problème.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top