2010-05-25 16 views
18

Ist es möglich, einen WCF-Dienst mit SSL und Basisauthentifizierung in IIS nur mit BasicHttpBinding-Bindung einzurichten? (Ich kann die wsHttpBinding-Bindung verwenden)Wie kann ich WCF nur mit Basisttpbinding, SSL und Basic Authentication in IIS verwenden?

Die Seite ist auf IIS 7 gehostet, mit den folgenden Authentifizierungs einzurichten:

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

Dienstkonfiguration:

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

I 2 versucht Arten von Bindungen mit zwei verschiedenen Fehlern:

1 - IIS-Fehler: 'Es konnte keine Basisadresse gefunden werden, die mit dem Schema http für den Endpunkt mit der Bindung von BasicHttpBinding übereinstimmt. Registrierte Basisadressenschemas sind [https].

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

</bindings> 

2 - IIS Fehler: Die Sicherheitseinstellungen für diesen Dienst erfordern ‚Anonymous‘ Authentifizierung, aber es ist nicht für die IIS-Anwendung aktiviert, die diesen Dienst hostet.

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

</bindings> 

Kann jemand das richtig konfigurieren? (wenn möglich?)

Antwort

24

Nach ein wenig Graben und Fragen an einige Kollegen haben wir das Problem gelöst.

Wichtig zu verstehen ist, gibt es 2 Aspekte der Sicherheit in diesem Fall. Die IIS-Sicherheit und die WCF-Sicherheit.

IIS-Sicherheit: SSL aktivieren & aktivieren Standardauthentifizierung. Deaktivieren Sie die anonyme Authentifizierung. (Natürlich schafft eine Windows-Konto/Gruppe und die Berechtigungen für die Anwendung in IIS festgelegt.)

WCF Sicherheit: Weil die Bindung nur ein Basichttpbinding ist, wird der Dienst nicht gültig etwas verlangen. IIS ist dafür verantwortlich.

Die Bindung Konfiguration des Dienstes:

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

Und schließlich, den ersten Fehler zu beheben, wir die mex Endpoint gelöscht. Dieser Endpunkt erfordert eine HTTP-Bindung.

Deleted:

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

Vielen Dank für diesen Beitrag. Was meinen Sie mit "Festlegen der Berechtigungen für Ihre Anwendung in IIS"? –

+2

Für welche Gruppen sollte das Windows-Benutzerkonto lang sein? Welche Berechtigungen müssen eingerichtet werden? –

+2

Warum löschen Sie '? – Kiquenet