[INTRO]
Ricordiamo che per impersonificare l'utente chiamate della risorsa attraverso la Windows Authentication è necessario il codice che segue nel Web.config o nel Machine.config

<authentication mode="="Windows" />
< identity impersonate="true" />

[/INTRO]

Quando viene messa in gioco l'autenticazione Windows in accoppiata con Impersonation le seguenti opzioni di sicurezza sono disponibili.

Windows ACLs
L'utente ha richiesto una risorsa. ASP.NET FileAuthorizaionModule esegue un access check per la tipologia di file richiesto il quale deve essere mappato nella ISAPI ASP.NET. Per fare questo utilizza l'access token dell'utente che ha effettuato la richiesta.
Per i file che non sono mappati nella ISAPI, IIS esegue un access check, sempre utilizzando l'access token dell'utente ed in più verifica ACL del file richiesto.

Url Authorization
L'abbiamo introdotta alcuni post fa, grazie a questa opzione è possibile permettere\negare l'accesso a specifici utenti o gruppo di utenti. Questa operazione può essere effettua nel web.config o nel machine.config (per applicarlo a tutte le applicazioni che girano nel server).


<deny user="DomainName\UserName" />
<allow roles="DomainName\WindowsGroup" />
<
/authorization>

Per sicurezza programmatica s'intendono i check di sicurezza integrati all'interno del codice dell'applicazione ASP.NET. Le opzioni di sicurezza che seguono sono fruibili quando viene utilizzata Windows Authentication e Impersonation.

PrincipalPermission Demands
Imperativa :

 PrincipalPermission permCheck = new PrincipalPermission(
                                   
null, @"DomainName\WindowsGroup");
 permCheck.Demand();


Dichiarata:

[PrincipalPermission(SecurityAction.Demand, 
                       Role=@"DomainName\WindowsGroup)]

Check espliciti sui Ruoli
Si possono eseguire dei controlli di appartenenza a gruppi utilizzando l'interfaccia IPrincipal.

IPrincipal.IsInRole(@"DomainName\WindowsGroup");

Ruoli Servizi Enterprise (COM+)
E' possibile effettuare dei check suoi ruoli programmaticamente utilizzando la classe ContextUtil

ContextUtil.IsCallerInRole("Manager")


Quando utilizzarla
Windows Authentication con Impersonation va usata quando:

  1. Gli utenti dell'applicazione hanno account utenti che possono essere autenticati dal server
  2. Hai bisogno di passare il security context del chiamante al middle tier o al data tier della nostra Web Application per supportare una autorizzazione di tipologia Granulare
  3. Per utilizzare il security context del chiamante per verificare appartenenza a ruoli e fornire dati/funzionalità a particolare gruppi o ruoli.

Svantaggi
Alcuni svantaggi nell'utilizzare l'impersonation.

  1. Si riduce drasticamente la scalabità dovuta all'inabilità di effettuare pool di connessioni a database.
  2. Delegation richiede l'autenticazione Kerberos e (non da poco) un ambiente ben configurato.