web-dev-qa-db-fra.com

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

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 nécessitent une authentification «anonyme», mais elle n'est pas activée pour l'application IIS qui héberge ce service.  

Je veux utiliser l'authentification Windows et donc l'accès anonyme est 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.

43
Rashack

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)

42
Rashack

Vous pouvez vérifier ceci one . 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>
14
Padel

utilisez simplement vos liaisons de service pour mex aussi.

Alors changez 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

11
sandyiit

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

Vérifiez donc que seule la fonction Authentification Windows est activée pour l’authentification "racine" de votre site. Puis développez 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 pour le site et le service.

Au moins, j'avais un message d'erreur identique avec le site Web et le service de base MSSQL Master Data Services 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?

2
Atte

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

1
Sagar S.

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!

0
Narayana

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

0
csrowell

Solution supplémentaire:

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

J'espère que ça aide d'une certaine manière.

0
SyntaxError