Impersonate & delegate
Finalmente trovo un po’ di tempo per continuare la trattazione iniziata in un mio articolo precedente dei Motivi per veicolare il contesto utente fino al database, e a questo rimando dando per scontati alcuni argomenti.
Sono già stati evidenziati i benefici e le caratteristiche dell’utilizzo dell’autenticazione integrata e del contesto utente anche fino all’ultimo livello applicativo (tier). E’ stata poi spiegata la configurazione da utilizzare in un’archiettura a 3-tier (IE-IIS-SQL) tutta implementata in un unica macchina (single server).
Per capire come il security context di un utente possa essere veicolato esternamente ad un server da un servizio ad un altro, bisogna comprendere i protocolli di autenticazione utilizzati.

NTLM e Kerberos a confronto
Il protocolli di autenticazione supportati da Windows sono NTLM (NT Lan Manager, fino dalla versione 4.0) e Kerberos (da Win 2000 in poi). Mentre NTLM si basa su un meccanismo di challenge/response (ovvero lo scambio di un hash criptato tra client e server), Kerberos basa la sua architettura sull’esistenza di server autenticatori (KDC, Key distribuition center), che distribuiscono tikets (cifrati e firmati e quindi affidabili) ai client per utilizzare specifici servizi.
I pregi di Kerberos sono:
- lo standard aperto, basato sull’RFC 4120
- la maggiore velocità, poiché, diversamente da NTLM, il servizio non deve verificare la validità dell’utente/client presso un DC, ma gli basta semplicemente il ticket stesso
- la mutua autenticazione, poichè non solo il client si autentica al servizio (come NTLM), ma il client stesso è certo dell’identità del servizio, poichè solo quello può leggere il ticket fornito
- supporto per il logon tramite smart card
- supporto per la delega dell’autenticazione (Authentication delegation o Authentication forwarding): grazie a questa caratteristica un servizio può accedere ad un risorsa remota per conto di un utente.
Quet’ultimo punto sta a significare che un utente A può dare diritti ad un’entità intermedia B per autenticarsi ad un terzo server C, come se
l’entità B fosse l’utente A stesso. Il server C baserà le sue decisioni autorizzative sull’identità di A invece che su quella di B.
E’ possibile iterare questo schema per più livelli applicativi distribuiti (multi-tier applications) solamente utilizzando Kerberos e non NTLM, semplicemente perchè NTLM non supporta la delegation! Quindi NTLM funziona su un’architettura a single server solo perchè il security context dell’utente viene creato alla sua connessione al primo livello sul server (dopo l’autenticazione) ed è disponibile poi per i livelli applicativi sucessivi.
Nell’implementazione Microsoft di Kerberos, il servizio stesso è altamente integrato con Active Directory (AD) e tutti i dati e le credenziali sono memorizzati in essa



