Comment trouvez-vous le nom d’utilisateur / identité en C #

J’ai besoin de rechercher par programmation le nom des utilisateurs à l’aide de C #. Plus précisément, je souhaite que l’utilisateur système / réseau soit associé au processus en cours. J’écris une application Web qui utilise la sécurité intégrée de Windows.

La vision abstraite de l’identité est souvent l’ IPrincipal IIdentity :

 IPrincipal principal = Thread.CurrentPrincipal; IIdentity identity = principal == null ? null : principal.Identity; ssortingng name = identity == null ? "" : identity.Name; 

Cela permet au même code de fonctionner dans de nombreux modèles différents (winform, asp.net, wcf, etc.) – mais cela dépend de la définition préalable de l’identité (car elle est définie par l’application). Par exemple, dans un winform, vous pouvez utiliser l’identité Windows de l’utilisateur actuel:

 Thread.CurrentPrincipal = new WindowsPrincipal(WindowsIdentity.GetCurrent()); 

Toutefois, le principal peut également être entièrement personnalisé – il ne concerne pas nécessairement les comptes Windows, etc. Une autre application peut également utiliser un écran de connexion pour permettre à des utilisateurs arbitraires de se connecter:

 ssortingng userName = "Fred"; // todo ssortingng[] roles = { "User", "Admin" }; // todo Thread.CurrentPrincipal = new GenericPrincipal(new GenericIdentity(userName), roles); 

Dépend du contexte de l’application. Vous pouvez utiliser Environment.UserName (console) ou HttpContext.Current.User.Identity.Name (web). Notez que lorsque vous utilisez l’authentification intégrée Windows, vous devrez peut-être supprimer le domaine du nom d’utilisateur. En outre, vous pouvez obtenir que l’utilisateur actuel utilise la propriété User de la page dans codebehind, plutôt que de la référencer à partir du contexte HTTP actuel.

 ssortingng user = System.Security.Principal.WindowsIdentity.GetCurrent().Name ;