38 votes

Obtenir le nom d'utilisateur Windows - différentes méthodes

Dans .NET, il semble y avoir plusieurs façons d'obtenir le nom d'utilisateur Windows actuel. Dont trois sont:

 string name = WindowsIdentity.GetCurrent().Name;
 

ou

 string name = Thread.CurrentPrincipal.Identity.Name;
 

ou

 string name = Environment.UserName;
 

Quelle est la différence et pourquoi choisir une méthode plutôt qu'une autre? Y a-t-il d'autres moyens?

32voto

Simon Svensson Points 11667

De l'environnement.Nom d'utilisateur appels GetUserName dans advapi32.dll. Cela signifie que si vous êtes à usurper l'identité d'un autre utilisateur, cette propriété seront le reflet.

Fil de discussion.CurrentPrincipal a un setter et peut être modifiée par programmation. (Ce n'est pas l'emprunt d'identité btw.)

WindowsIdentity est votre windows identité, le cas échéant. Il ne reflète pas nécessairement l'utilisateur, pensez à ASP.NET avec FormsAuthentication. Puis le WindowsIdentity sera le NT-service, mais la FormsIdentity sera à l'utilisateur connecté. Il y a aussi un PassportIdentity, et vous pouvez construire vos propres trucs pour compliquer encore plus les choses.

1voto

Andreas Rejbrand Points 57164

Vous avez demandé des moyens alternatifs.

Bien sûr, vous pouvez toujours utiliser l'API Windows native: GetUserName .

0voto

Pavel Radzivilovsky Points 11613

Je crois que la propriété a été placée à plusieurs endroits afin qu'il soit plus facile à trouver pour le programmeur. Il n'y a qu'un seul utilisateur connecté et un seul nom respectif.

0voto

Les trois méthodes sont décrites comme suit:

HttpContext = HttpContext.Actuel.L'utilisateur, qui retourne un objet IPrincipal qui contient des informations de sécurité à la demande Web actuelle. C'est le authentifié client Web.

WindowsIdentity = WindowsIdentity.GetCurrent(), qui renvoie à l'identité du contexte de sécurité de l'Win32 en cours d'exécution du thread.

Fil = Fil.CurrentPrincipal qui renvoie le principal cours d'exécution .NET thread qui monte sur le dessus de la Win32 fil.

Et ils variation du résultat en fonction de votre configuration IIS, comme expliqué dans cet article: http://msdn.microsoft.com/en-us/library/aa302377.aspx

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X