2009-06-22 10 views
43

Sto facendo fatica ad ottenere il servizio WCF in esecuzione su IIS sul nostro server. Dopo l'implementazione, viene visualizzato un messaggio di errore:WCF - Autenticazione di Windows - Le impostazioni di sicurezza richiedono Anonymous

Le impostazioni di sicurezza per questo servizio richiedono l'autenticazione "anonima" ma non sono abilitate per l'applicazione IIS che ospita questo servizio.

Desidero utilizzare l'autenticazione di Windows e pertanto l'accesso anonimo è disabilitato. Si noti inoltre che c'è aspNetCompatibilityEnabled (se questo fa alcuna differenza).

Ecco il mio 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> 

Ho cercato in tutto l'Internet senza fortuna. Ogni indizio è molto apprezzato.

+3

La domanda dovrebbe identificare quale versione di IIS sta utilizzando. –

+0

La versione era IIS 6.0 – Rashack

+0

Consulta http://stackoverflow.com/questions/9588265/understanding-wcf-windows-authentication anche – Lijo

risposta

42

Quindi sembra un problema abbastanza comune. Il punto è quello di rimuovere mex dai vostri attacchi:

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

Alternativelly si abilita l'accesso anonimo in IIS e nel tuo web.config è assicurarsi l'accesso anonimo viene negato.

Spero che questo aiuti qualche altra anima. (Ero sicuro al 100% che l'ho provato con mex rimosso.: -O)

+0

Ho finito per utilizzare la tua alternativa. IIS anon + Windows con web.config che nega tutti gli utenti anonimi. Sto ospitando 3.5 WCF REST con asp.net. Grazie – Nathan

+6

In realtà, rimuovere mex non funziona. – Andrey

+0

Questo ha funzionato per me dopo aver seguito i passaggi che ho trovato qui: [collegamento] (https://msdn.microsoft.com/en-us/library/ff648505.aspx), a cui sono stato indirizzato da qui: [collegamento] (http://stackoverflow.com/questions/8591238/wcf-says-my-settings-require-anonymous-authentication-but-i-dont-want-them) @Andrey –

0

Sì, sembra che sia necessario rimuovere completamente l'endpoint mex. Impostazione

<serviceMetadata httpGetEnabled="false"/> 

da solo non ha funzionato. Grazie!

14

È possibile controllare questo one. Sono riuscito a farlo funzionare come previsto.

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

grazie per le informazioni - sarebbe un è più utile citare la sezione pertinente delle informazioni qui piuttosto che fornire un collegamento ipertestuale nudo. –

11

basta usare gli attacchi di servizio anche per mex.

Quindi cambiare la vostra configurazione corrente:

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

a

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

Questo dovrebbe risolvere il problema

+0

Grazie! Questo ha funzionato per me, ma, per essere chiari, ho anche dovuto mantenere 'httpGetEnabled =" true "' – McArthey

+0

sì, devi averlo anche tu – sandyiit

+0

Ho lavorato per me usando basicHttpBinding. Ho cambiato il binding sull'endpoint "mex" da "mexHttpBinding" a "basicHttpBinding" – Teevus

0

soluzione supplementare:

Devi solo fare in modo che il servizio nome e contratto sono corretti.

Spero che aiuti in qualche modo.

2

L'autenticazione anonima può e in alcuni casi deve essere abilitata per il servizio ma non per il sito.

Pertanto, verificare che l'autenticazione "root" del proprio sito abbia solo l'autenticazione di Windows abilitata. Quindi espandi il tuo sito, seleziona la cartella 'servizio' e assicurati che il tuo servizio abbia abilitato Windows e Autenticazione anonima.

Avevo un ambiente identico in cui funzionava, solo la differenza in questi ambienti era l'autenticazione del servizio.Il problema nel mio caso non è stato causato da fornitori selezionati (Ntlm o Negotiate) ma le impostazioni di autenticazione per sito e servizio.

Almeno avevo identico messaggio di errore con il servizio web MSSQL Master Data Services & e questa era la soluzione. Ho ricevuto l'errore quando eseguivo solo il servizio, ma il sito funzionava quasi bene, MDS Explorer non funzionava perché le impostazioni di autenticazione del servizio erano sbagliate all'inizio. La causa di questa mancata configurazione potrebbe essere un bug in MDS Configuration Manager durante la creazione di un nuovo sito MDS?

Quindi nel mio caso non è stato possibile risolvere il problema apportando modifiche speciali al file web.config né ai file ApplicationHost.config, non ho apportato alcuna modifica ai file di configurazione. Appena selezionato le impostazioni di autenticazione corrette per il sito web e il suo servizio nel gestore IIS. Non sono sicuro che questo sia il caso qui, ma forse vale la pena provarlo?

1

Ha funzionato per me quando rimuovo l'endpoint 'mex' e anche impostato clientCredentialType = 'Ntlm' Stavo ospitando il mio WCF all'interno di SharePoint.

+0

Ha fatto il trucco per me. – NLV

0

Sembra che questo problema di associazione MEX sia stato risolto in .NET 4.0. Modifica del pool di app del nostro server La versione .NET CLR da 2.0 a 4.0 ha risolto il problema.

Problemi correlati