Come si può facilmente intendere dal nome, una WindowsIdentity identifica uno specifico utente Windows. La maggiore differenza che si può incontrare facendo la comparazione tra WindowsIdentity e GenericIdentity sta nella costruzione dell'oggetto.

Una WindowsIdentity si propone con quattro costruttori, il primo argomento di questi è di tipo IntPtr.

IntPtr windowsToken /* =...*/; IIdentity windowsUser = new WindowsIdentity(windowsToken, "NTLM", WindowsAccountType.Normal, true);

Questo esempio mostra come il costruttore usi più argomenti. Il secondo argomento è dato dalla tipologia di autentificazione. Il terzo invece è valore di enumerazione di tipo WindowsAccountType, il quale, identifica la tipologia di account rappresentato dall'identity stessa.

WindowsAccountType può assumere quattro tipi di valore

  • Anonymous: Un account di tipo anonimo
  • Guest : Un account di tipo Guest
  • Normal : Un account tradizionale Windows
  • System : Un account di sistema

Il quarto parametro (nell'esempio settato a True), permette di specificare l'avvenuta autentificazione dell'utente rappresentato.
Come visto nel precedente snippet, si può avere bisogno di maggior lavoro per specificare l'oggetto identity ad un utente. Tuttavia basti sapere che, per ricavare tutte le informazioni necessarie sull'utente corrente, è necessario chiamare il metodo GetCurrent() in questo modo:

IIdentity currentWindowsUser = WindowsIdentity.GetCurrent();

Il risultato di questa operazione ritornerà un valore nel formato domain\user e la tipologia di autentificazione ricevuta. In questo caso "NTLM". Nel caso si voglia ricevere un utente di Windows Anonimo si può invocare il metodo GetAnonymous() come mostrato di seguito:

IIdentity anonymousUser = WindowsIdentity.GetAnonymos();

Per quanto riguarda le FormsIdentity e le PassportIdentity vorrei rimandare la loro spiegazione nei futuri posts, per ora ci basti sapere che :

  • Le FormsIdentity sono principalmente usate nelle applicazioni ASP.NET
  • Le PassportIdentity rappresentano un utente autentificato grazie al servizio Microsoft .NET Passport.