2010-05-25 15 views
18

È possibile impostare un servizio WCF con SSL e l'autenticazione di base in IIS utilizzando solo BasicHttpBinding-binding? (Non posso usare il wsHttpBinding vincolante)Come posso utilizzare WCF con solo basichttpbinding, SSL e autenticazione di base in IIS?

Il sito è ospitato su IIS 7, con il seguente di autenticazione configurare:

- Anonymous access: off 
    - Basic authentication: on 
    - Integrated Windows authentication: off !! 

servizio di configurazione:

<services> 
    <service name="NameSpace.SomeService"> 
    <host> 
     <baseAddresses> 
     <add baseAddress="https://hostname/SomeService/" /> 
     </baseAddresses> 

    </host> 
    <!-- Service Endpoints --> 
    <endpoint address="" binding="basicHttpBinding" 
       bindingNamespace="http://hostname/SomeMethodName/1" 
       contract="NameSpace.ISomeInterfaceService" 
       name="Default" 
         /> 
    <endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/> 
    </service> 
</services> 
<behaviors> 
    <serviceBehaviors> 
    <behavior> 
     <!-- To avoid disclosing metadata information, set the value below to false and remove the metadata endpoint above before deployment --> 
     <serviceMetadata httpsGetEnabled="true"/> 
     <!-- To receive exception details in faults for debugging purposes, set the value below to true. Set to false before deployment to avoid disclosing exception information --> 
     <serviceDebug includeExceptionDetailInFaults="false"/> 
     <exceptionShielding/> 
    </behavior> 
    </serviceBehaviors> 
</behaviors> 

ho provato 2 tipi di binding con due diversi errori:

1 - Errore IIS: "Impossibile trovare un indirizzo di base che corrisponda a http dello schema per l'endpoint con associazione BasicHttpBinding. Gli schemi di indirizzi di base registrati sono [https].

<bindings> 
    <basicHttpBinding> 
    <binding> 
     <security mode="TransportCredentialOnly"> 
     <transport clientCredentialType="Basic"/> 
     </security> 
    </binding> 
    </basicHttpBinding> 

</bindings> 

2 - IIS Errore: Impostazioni di protezione per questo servizio richiede l'autenticazione 'Anonymous', ma non è abilitata per l'applicazione IIS che ospita questo servizio.

<bindings> 
    <basicHttpBinding> 
    <binding> 
     <security mode="Transport"> 
     <transport clientCredentialType="Basic"/> 
     </security> 
    </binding> 
    </basicHttpBinding> 

</bindings> 

Qualcuno sa come configurarlo correttamente? (se possibile?)

risposta

24

Dopo alcuni scavi e alcune domande ad alcuni colleghi, abbiamo finalmente risolto il problema.

Importante da comprendere è che in questo caso ci sono 2 aspetti di sicurezza. La sicurezza di IIS e la sicurezza della WCF.

Sicurezza IIS: Abilitare SSL & abilitare l'autenticazione di base. Disabilitare l'autenticazione anonima. (Naturalmente, creare una finestra Account/gruppo e impostare le autorizzazioni per l'applicazione in IIS.)

WCF sicurezza: Perché il legame è solo una BasicHttpBinding, il servizio non richiede di valide nulla. IIS è responsabile per questo.

La configurazione vincolante del servizio:

<bindings> 
    <basicHttpBinding> 
    <binding> 
     <security mode="Transport"> 
      <transport clientCredentialType="Basic" /> 
     </security> 
    </binding> 
    </basicHttpBinding> 

E, infine, per risolvere il primo errore, abbiamo eliminato il mex Endpoint. Questo endpoint richiede un binding HTTP.

Deleted:

<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/> 
+2

Grazie per questo post. Cosa intendi per "impostare le autorizzazioni per l'applicazione in IIS"? –

+2

A quali gruppi dovrebbe essere richiesto l'account utente di Windows? Quali autorizzazioni dovrebbero essere impostate? –

+2

Perché cancellare ''? – Kiquenet