18 votes

Comment trouver le nom/identité de l'utilisateur en C# ?

J'ai besoin de trouver par programme le nom des utilisateurs en utilisant C#. Plus précisément, je veux obtenir l'utilisateur système/réseau attaché au processus actuel. J'écris une application web qui utilise la sécurité intégrée de Windows.

38voto

Marc Gravell Points 482669

La vision abstraite de l'identité est souvent la IPrincipal / IIdentity :

IPrincipal principal = Thread.CurrentPrincipal;
IIdentity identity = principal == null ? null : principal.Identity;
string 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 il faut que l'identité soit définie à l'avance (puisqu'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 totalement personnalisé - il ne s'agit pas nécessairement de comptes Windows, etc. Une autre application pourrait utiliser un écran de connexion pour permettre à des utilisateurs arbitraires de se connecter :

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

16voto

tvanfosson Points 268301

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

3voto

Mehdi Bugnard Points 1652
string user = System.Security.Principal.WindowsIdentity.GetCurrent().Name ;

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