clientcredentialtype - ¿Cómo puedo usar WCF solo con basichttpbinding, SSL y autenticación básica en IIS?
wcf rest https (1)
¿Es posible configurar un servicio WCF con SSL y autenticación básica en IIS utilizando solo el enlace BasicHttpBinding? (No puedo usar el enlace wsHttpBinding)
El sitio está alojado en IIS 7, con la siguiente configuración de autenticación:
- Anonymous access: off
- Basic authentication: on
- Integrated Windows authentication: off !!
Config del servicio:
<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>
Probé 2 tipos de enlaces con dos errores diferentes:
1 - Error de IIS: ''No se pudo encontrar una dirección base que coincida con el esquema http para el punto final con el enlace BasicHttpBinding. Los esquemas de direcciones base registradas son [https].
<bindings>
<basicHttpBinding>
<binding>
<security mode="TransportCredentialOnly">
<transport clientCredentialType="Basic"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
2 - Error de IIS: la configuración de seguridad para este servicio requiere autenticación ''Anónima'' pero no está habilitada para la aplicación IIS que aloja este servicio.
<bindings>
<basicHttpBinding>
<binding>
<security mode="Transport">
<transport clientCredentialType="Basic"/>
</security>
</binding>
</basicHttpBinding>
</bindings>
¿Alguien sabe cómo configurar esto correctamente? (¿si es posible?)
Después de investigar y hacer algunas preguntas a algunos colegas, finalmente resolvimos el problema.
Es importante entender que hay 2 aspectos de seguridad en este caso. La seguridad IIS y la seguridad WCF.
Seguridad de IIS: habilite SSL y habilite la autenticación básica. Deshabilitar la autenticación anónima. (Por supuesto, cree una cuenta / grupo de Windows y configure los permisos en su aplicación en IIS).
Seguridad WCF : como el enlace es solo un enlace BasicHttpBinding, el servicio no requiere validar nada. IIS es responsable de esto.
La configuración de enlace del servicio:
<bindings>
<basicHttpBinding>
<binding>
<security mode="Transport">
<transport clientCredentialType="Basic" />
</security>
</binding>
</basicHttpBinding>
Y finalmente, para resolver el primer error, eliminamos el punto final de mex. Este punto final requiere un enlace HTTP.
Suprimido
<endpoint address="mex" binding="mexHttpsBinding" contract="IMetadataExchange"/>