Est-il possible de configurer un service WCF avec SSL et authentification de base dans IIS en utilisant uniquement la liaison BasicHttpBinding? (Je ne peux pas utiliser la liaison wsHttpBinding))
Le site est hébergé sur IIS 7, avec la configuration d'authentification suivante:
- Anonymous access: off
- Basic authentication: on
- Integrated Windows authentication: off !!
Configuration du 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 - IIS Erreur: 'Impossible de trouver une adresse de base qui correspond au schéma http pour le point de terminaison avec la liaison BasicHttpBinding. Les schémas d'adresses de base enregistrés sont [https].
<bindings>
<basicHttpBinding>
<binding>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
2 - IIS Erreur: les paramètres de sécurité pour ce service nécessitent une authentification 'anonyme' mais elle n'est pas activée 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?)
Après avoir creusé et posé des questions à quelques collègues, nous avons finalement résolu le problème.
Il est important de comprendre qu'il existe deux aspects de la sécurité dans ce cas. La sécurité IIS et la sécurité WCF.
Sécurité IIS: Activer SSL et activer l'authentification de base. Désactivez l'authentification anonyme. (Bien sûr, créez un compte/groupe Windows et définissez les autorisations sur votre application dans IIS.)
sécurité WCF: Étant donné que la liaison n'est qu'un BasicHttpBinding, le service n'a pas besoin de valider quoi que ce soit. 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 mex Endpoint. Ce point de terminaison nécessite une liaison HTTP.
Supprimé:
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>