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?
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 .
Pour l'authentification Windows
sélectionnez votre projet.
Appuyez sur F4
Désactiver "Authentification anonyme" et activer "Authentification Windows"
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.
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é.
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 ).