Sicuro servizio WCF ospitato in IIS 7 utilizzando l'autenticazione di Windows ristretta per gruppo o utenti definiti
-
19-09-2019 - |
Domanda
Come configurare un servizio WCF ospitato in IIS 7 per consentire l'accesso per gli utenti solo definiti / gruppi a.
configurazione esistente:
<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>
Voglio quindi configurare i permessi (utenti o gruppi) sia nel web.config o nel file system su file o cartelle.
Soluzione
Prima di tutto, se siete in un ambiente Intranet, si potrebbe e dovrebbe passare a netTcpBinding - è più veloce, è più flessibile, nessuno può chiamare dall'esterno (al di là dei firewall) -. Perfetto
Avanti - si dispone di credenziali di Windows attivata di default con wsHttpBinding e con netTcpBinding. In un mondo WCF, si dovrebbe file o cartelle in genere non sicuri - quello che ci sicuri sono chiamate di servizio - e così facendo è facile con le credenziali di Windows - basta aggiungere un attributo PrincipalPermission per l'implementazione del servizio, e il gioco è fatto:
class MyService : IMyService
{
[PrincipalPermission(SecurityAction.Demand, Role="SysAdmin")]
public void SensitiveMethod()
{
....
}
}
dovrebbe funzionare bene.
Se si ha realmente bisogno per proteggere i file e cartelle, si può sempre utilizzare il file web.config e specificare le autorizzazioni di accesso abituali in base ai nomi utente di Windows e gruppi - ma che non ha nulla a che fare con WCF, davvero
Marc