HttpContext.Current.User.Identity.Name如何知道存在哪些用户名?

时间:2014-01-14 15:43:54

标签: c# asp.net httpcontext

这不一定是个问题,我只是好奇它是如何运作的。我有一个方法:

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,但它如何知道哪些用户名存在或不存在?

6 个答案:

答案 0 :(得分:52)

用于Windows身份验证

选择你的项目。

按F4

禁用“匿名身份验证”并启用“Windows身份验证”

enter image description here

答案 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.UserReference 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)显然取决于身份验证模式用过。

见:https://docs.microsoft.com/en-us/dotnet/api/system.security.principal.iidentity?view=netframework-4.8