2010-05-25 29 views
18

Est-il possible de configurer un service WCF avec SSL et l'authentification de base dans IIS en utilisant uniquement la liaison BasicHttpBinding? (Je ne peux pas utiliser le wsHttpBinding contraignant)Comment utiliser WCF avec uniquement basichttpbinding, SSL et Basic Authentication dans IIS?

Le site est hébergé sur IIS 7, avec l'authentification configuration suivante:

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

Config Service:

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

J'ai essayé 2 types de liaisons avec deux erreurs différentes:

1 - Erreur IIS: 'Impossible de trouver une adresse de base correspondant au schéma http pour le noeud final avec la liaison BasicHttpBinding. Les schémas d'adresse de base enregistrés sont [https].

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

</bindings> 

2 - Erreur IIS: Les paramètres de sécurité pour ce service exigent l'authentification "Anonyme mais il n'est pas activé pour l'application IIS qui héberge ce service.

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

</bindings> 

Est-ce que quelqu'un sait comment configurer cela correctement? (si possible?)

Répondre

24

Après avoir creusé et posé quelques questions à quelques collègues, nous avons finalement résolu le problème.

Il est important de comprendre qu'il y a deux aspects de la sécurité dans ce cas. La sécurité IIS et la sécurité WCF.

Sécurité IIS: Activer SSL & Activer l'authentification de base. Désactiver l'authentification anonyme (Bien sûr, créer un compte Windows/groupe et définir les autorisations sur votre application dans IIS.)

sécurité WCF: Parce que la liaison est seulement BasicHttpBinding, le service ne nécessite pas de quoi que ce soit valide. IIS est responsable de cela.

La configuration de liaison du service:

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

Et enfin, pour résoudre la première erreur, nous avons supprimé le point de terminaison MEX. Ce point de terminaison nécessite une liaison HTTP.

Deleted:

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

Merci pour ce post. Que voulez-vous dire par "définir les autorisations sur votre application dans IIS"? –

+2

Pour quels groupes le compte d'utilisateur Windows doit-il être long? Quelles autorisations doivent être configurées? –

+2

Pourquoi supprimer ''? – Kiquenet