web-dev-qa-db-fra.com

Comment obtenir un utilisateur actuel qui accède à une application ASP.NET?

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.

19
SamekaTV

Si vous utilisez un abonnement, vous pouvez faire: Membership.GetUser()

Votre code renvoie le compte Windows auquel est attribué ASP.NET.

13
Robert

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

44
BenCr

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:

  1. Accédez à IIS → Sites → Votre site → Authentification

    IIS Settings

  2. Maintenant, vérifiez que Accès anonyme est désactivé et Authentification Windows est activé.

    Authentication

  3. Maintenant, System.Web.HttpContext.Current.User.Identity.Name devrait retourner quelque chose comme ceci:

    domain\username

15
Santiago Diaz

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;
    }
}
5
Deepak Kothari

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.

2
peter_the_oak

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;
0
BruceK