Servicio WCF seguro alojado en IIS 7 utilizando la autenticación de Windows restringida por grupo o usuarios definidos
-
19-09-2019 - |
Pregunta
Cómo configurar un servicio wcf alojado en IIS 7 para permitir el acceso solo a usuarios/grupos definidos.
Configuración existente:
<authentication mode="Windows"/>
<services>
<service name="MyService.Test" behaviorConfiguration="MyService.TestBehavior">
<endpoint address="" binding="wsHttpBinding" contract="MyService.ITest">
<identity>
<dns value="localhost"/>
</identity>
</endpoint>
<endpoint address="mex" binding="mexHttpBinding" contract="IMetadataExchange"/>
</service>
</services>
<behaviors>
<serviceBehaviors>
<behavior name="MyService.TestBehavior">
<serviceMetadata httpGetEnabled="true"/>
<serviceDebug includeExceptionDetailInFaults="true"/>
</behavior>
</serviceBehaviors>
</behaviors>
Luego quiero configurar permisos (usuarios o grupos) ya sea en web.config o en el sistema de archivos en archivos o carpetas.
Solución
En primer lugar, si está en un entorno de intranet, podría y debería cambiar a netTcpBinding: es más rápido, más flexible, nadie puede llamar desde el exterior (más allá de sus firewalls), perfecto.
A continuación, tiene las credenciales de Windows activadas de forma predeterminada con wsHttpBinding y netTcpBinding.En un mundo WCF, normalmente no protegería archivos o carpetas (lo que protegería son llamadas de servicio) y hacerlo es fácil con las credenciales de Windows; simplemente agregue un atributo PrincipalPermission a la implementación de su servicio y listo:
class MyService : IMyService
{
[PrincipalPermission(SecurityAction.Demand, Role="SysAdmin")]
public void SensitiveMethod()
{
....
}
}
Debería funcionar bien.
Si realmente necesita proteger archivos y carpetas, siempre puede usar el archivo web.config y especificar los permisos de acceso habituales basados en los nombres de usuario y grupos de Windows, pero eso no tiene nada que ver con WCF, en realidad.
Bagazo