web-dev-qa-db-fra.com

Comment HttpContext.Current.User.Identity.Name sait-il quels noms d'utilisateur existent?

Ce n'est pas nécessairement un problème, je suis simplement curieux de savoir comment cela fonctionne. J'ai une méthode:

public static bool UserIsAuthenticated()
{
    bool isAuthed = false;
    try
    {
        if (HttpContext.Current.User.Identity.Name != null)
        {
            if (HttpContext.Current.User.Identity.Name.Length != 0)
            {
                FormsIdentity id = (FormsIdentity)HttpContext.Current.User.Identity;
                FormsAuthenticationTicket ticket = id.Ticket;
                isAuthed = true;
                string MyUserData = ticket.UserData;
            }
        }
    }
    catch { } // not authed
    return isAuthed;
}

Le HttpContext.Current.User.Identity.Name retourne null si l'utilisateur n'existe pas, mais comment savoir quels noms d'utilisateur existent ou n'existent pas?

34
Srb1313711

HttpContext.Current.User.Identity.Name renvoie la valeur null

Cela dépend si le mode d’authentification est défini sur Formulaires ou Windows dans votre fichier web.config.

Par exemple, si j'écris l'authentification comme ceci:

<authentication mode="Forms"/>

Ensuite, parce que le mode d'authentification = "Formulaires", j'obtiendrai null pour le nom d'utilisateur. Mais si je change le mode d’authentification à Windows comme ceci:

<authentication mode="Windows"/>

Je peux exécuter l'application à nouveau et vérifier le nom d'utilisateur, et j'obtiendrai le nom d'utilisateur avec succès.

Pour plus d'informations, voir System.Web.HttpContext.Current.User.Identity.Name Vs System.Environment.UserName dans ASP.NET .

25
Anurag Jain

Pour l'authentification Windows

sélectionnez votre projet.

Appuyez sur F4

Désactiver "Authentification anonyme" et activer "Authentification Windows"

enter image description here

53
Anwar Ul Haq

Supposons un environnement réseau dans lequel un "utilisateur" (autrement dit vous) doit se connecter. Il s’agit généralement d’un identifiant utilisateur (UID) et d’un mot de passe (PW). OK alors, quelle est votre identité ou qui êtes-vous? Vous êtes l'UID et cela glane ce "nom" de votre session d'ouverture de session. Simple! Il devrait également fonctionner dans une application Internet nécessitant votre identification, telle que Best Buy et d'autres.

Cela va extraire mon UID ou "Nom" de ma session lorsque j'ouvre la page par défaut de l'application Web que je dois utiliser. Maintenant, dans mon cas, je fais partie d'un domaine, je peux donc utiliser l'authentification Windows initiale et il doit vérifier qui je suis, donc la deuxième partie du code. En ce qui concerne l'authentification par formulaire, elle s'appuierait sur le ticket (probablement appelé cookie) envoyé à votre poste de travail/ordinateur. Et le code ressemblerait à ceci:

string id = HttpContext.Current.User.Identity.Name;

// Strip the domain off of the result
id = id.Substring(id.LastIndexOf(@"\", StringComparison.InvariantCulture) + 1);

Maintenant, il porte le nom de mon entreprise (ou UID) et peut l’afficher à l’écran.

3
CRH

Vérifiez également que

<modules>
      <remove name="FormsAuthentication"/>
</modules>

Si vous avez trouvé quelque chose comme ça, supprimez simplement:

<remove name="FormsAuthentication"/>

Ligne de web.config et voilà, cela fonctionnera bien, je l'ai testé.

2
Marconi Mac

Comment [HttpContext.Current.User] sait-il quels noms d'utilisateur existent ou n'existent pas?

Regardons un exemple d'une façon dont cela fonctionne. Supposons que vous utilisez l'authentification par formulaire et que l'événement "OnAuthenticate" se déclenche. Cet événement se produit " lorsque l'application authentifie la demande en cours " ( Source de référence ).

Jusqu'à présent, l'application n'a aucune idée de qui vous êtes.

Puisque vous utilisez l'authentification par formulaires, il vérifie d'abord en analysant le cookie d'authentification (généralement . ASPAUTH ) via un appel à ExtractTicketFromCookie. Ceci appelle FormsAuthentication.Decrypt _ (Cette méthode est publique; vous pouvez appeler cela vous-même!). Ensuite, il appelle Context.SetPrincipalNoDemand, en transformant le cookie en utilisateur et en le bourrant en Context.User _ ( Source de référence ).

1
Brian