Pour obtenir l’utilisateur actuellement connecté au système, j’utilise ce code:
string opl = System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString();
Je travaille sur une application ASP.NET où j'ai besoin de ces informations. Donc, j'ai mis mon application sur un serveur et essayé le code ci-dessus, et je reçois "Service réseau" dans la chaîne opl. J'ai besoin de connaître l'utilisateur actuel du PC qui accède à mon application ASP.NET.
Si vous utilisez un abonnement, vous pouvez faire: Membership.GetUser()
Votre code renvoie le compte Windows auquel est attribué ASP.NET.
La réponse rapide est User = System.Web.HttpContext.Current.User
Assurez-vous que votre composant web.config contient l'élément d'authentification suivant.
<configuration>
<system.web>
<authentication mode="Windows" />
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</configuration>
Autres lectures: Recette: activation de l'authentification Windows dans une application Web ASP.NET Intranet
Utiliser System.Web.HttpContext.Current.User.Identity.Name
devrait fonctionner. Vérifiez les paramètres du site IIS sur le serveur qui héberge votre site en procédant comme suit:
Accédez à IIS → Sites → Votre site → Authentification
Maintenant, vérifiez que Accès anonyme est désactivé et Authentification Windows est activé.
Maintenant, System.Web.HttpContext.Current.User.Identity.Name
devrait retourner quelque chose comme ceci:
domain\username
La meilleure pratique consiste à vérifier d'abord la propriété Identity.IsAuthenticated
, puis à obtenir le usr.UserName
comme ceci:
string userName = string.Empty;
if (System.Web.HttpContext.Current != null &&
System.Web.HttpContext.Current.User.Identity.IsAuthenticated)
{
System.Web.Security.MembershipUser usr = Membership.GetUser();
if (usr != null)
{
userName = usr.UserName;
}
}
Vous pouvez simplement utiliser une propriété de la page. Et la chose intéressante est que vous pouvez accéder à cette propriété n'importe où dans votre code.
Utilisez ceci:
HttpContext.Current.User.Identity.Name
Ne regarde pas trop loin.
Si vous développez avec ASP.NET MVC, vous avez simplement l'utilisateur comme propriété de la classe Controller
. Donc, si vous vous perdez dans certains modèles à la recherche de l'utilisateur actuel, essayez de revenir en arrière et de récupérer les informations pertinentes dans le contrôleur.
Dans le contrôleur, utilisez simplement:
using Microsoft.AspNet.Identity;
...
var userId = User.Identity.GetUserId();
...
avec userId
en tant que chaîne.
La réponse consensuelle générale ci-dessus semble avoir un problème de compatibilité avec le support CORS. Pour utiliser l'attribut HttpContext.Current.User.Identity.Name, vous devez désactiver l'authentification anonyme afin de forcer l'authentification Windows à fournir les informations de l'utilisateur authentifié. Malheureusement, je pense que l'authentification anonyme doit être activée pour pouvoir traiter la demande OPTIONS avant le vol dans un scénario CORS.
Vous pouvez contourner ce problème en laissant l'authentification anonyme activée et en utilisant plutôt l'attribut HttpContext.Current.Request.LogonUserIdentity. Cela renverra les informations de l'utilisateur authentifié (en supposant que vous soyez dans un scénario intranet) même avec l'authentification anonyme activée. L'attribut renvoie une structure de données WindowsUser et les deux sont définis dans l'espace de noms System.Web.
using System.Web;
WindowsIdentity user;
user = HttpContext.Current.Request.LogonUserIdentity;