这不一定是个问题,我只是好奇它是如何运作的。我有一个方法:
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;
}
如果用户不存在,HttpContext.Current.User.Identity.Name
会返回null
,但它如何知道哪些用户名存在或不存在?
答案 0 :(得分:52)
用于Windows身份验证
选择你的项目。
按F4
禁用“匿名身份验证”并启用“Windows身份验证”
答案 1 :(得分:22)
HttpContext.Current.User.Identity.Name返回null
这取决于您的web.config文件中身份验证模式是否设置为表单或 Windows 。
例如,如果我写这样的身份验证:
<authentication mode="Forms"/>
然后因为身份验证模式=“表单”,我将为用户名获取null。但是,如果我将身份验证模式更改为Windows,则:
<authentication mode="Windows"/>
我可以再次运行该应用程序并检查用户名,我将成功获得用户名。
有关详细信息,请参阅System.Web.HttpContext.Current.User.Identity.Name Vs System.Environment.UserName in ASP.NET。
答案 2 :(得分:2)
同时检查
<modules>
<remove name="FormsAuthentication"/>
</modules>
如果您发现此类内容,请删除:
<remove name="FormsAuthentication"/>
来自web.config的行,在这里你可以正常工作我已经测试了它。
答案 3 :(得分:2)
假设“用户”(又名您)必须登录的网络环境。通常这是用户ID(UID)和密码(PW)。那么,你的身份是什么,或者你是谁?您是UID,这可以从您的登录会话中“命名”。简单!它也应该在需要您登录的互联网应用程序中工作,例如Best Buy和其他人。
当我打开我需要使用的Web应用程序的默认页面时,这会从我的会话中提取我的UID或“Name”。现在,在我的实例中,我是域的一部分,所以我可以使用初始Windows身份验证,它需要验证我是谁,因此代码的第二部分。至于表单身份验证,它将依赖于发送到您的工作站/计算机的票证(最有可能是cookie)。代码看起来像:
string id = HttpContext.Current.User.Identity.Name;
// Strip the domain off of the result
id = id.Substring(id.LastIndexOf(@"\", StringComparison.InvariantCulture) + 1);
现在它有我的公司名称(又名UID),可以在屏幕上显示。
答案 4 :(得分:1)
[HttpContext.Current.User]如何知道存在或执行哪些用户名 不存在?
让我们看一下这种方法的一个例子。假设您正在使用表单身份验证并触发“OnAuthenticate”事件。此事件发生在“when the application authenticates the current request” (Reference Source)。
到目前为止,应用程序根本不知道你是谁。
由于您使用的是表单身份验证,因此首先通过调用ExtractTicketFromCookie
来解析身份验证cookie(通常是.ASPAUTH)。这会调用FormsAuthentication.Decrypt
(此方法是公开的;您可以自己调用它!)。接下来,它会调用Context.SetPrincipalNoDemand
,将Cookie转换为用户并将其填入Context.User
(Reference Source)。
答案 5 :(得分:1)
其实不然!它只保存当前登录用户的用户名。登录成功认证后,登录认证系统会自动将用户名存储到“HttpContext.Current.User.Identity.Name”属性中。
要检查当前用户是否已通过身份验证,您必须(出于安全原因)检查“HttpContext.Current.User.Identity.IsAuthenticated”布尔属性,该属性自动保存此信息,而不是编写您自己的代码。
如果当前用户未通过身份验证,“HttpContext.Current.User.Identity.Name”属性将为空或空字符串或“可以采用其他值”(https://docs.microsoft.com/en-us/dotnet/api/system.security.principal.iidentity.name?view=netframework-4.8)显然取决于身份验证模式用过。