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.
Réponses
Trop de publicités?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);
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.