Servicio WCF seguro alojado en IIS 7 utilizando la autenticación de Windows restringida por grupo o usuarios definidos

StackOverflow https://stackoverflow.com/questions/1166794

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.

¿Fue útil?

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

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top