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

carvr3hs  于 2023-04-13  发布在  .NET
关注(0)|答案(8)|浏览(216)

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

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

brccelvz

brccelvz1#

用于windows身份验证
选择您的项目。
按F4
禁用“匿名身份验证”并启用“Windows身份验证”

wfsdck30

wfsdck302#

HttpContext.Current.User.Identity.Name返回null
这取决于您的web.config文件中身份验证模式是设置为Forms还是Windows
例如,如果我像这样编写身份验证:

<authentication mode="Forms"/>

然后,因为身份验证模式=“Forms”,我将为用户名获得null。但是如果我像这样将身份验证模式更改为Windows:

<authentication mode="Windows"/>

我可以再次运行应用程序并检查用户名,我将成功获取用户名。
有关详细信息,请参阅System.Web.HttpContext.Current.User.Identity.Name Vs System.Environment.UserName in ASP.NET

brc7rcf0

brc7rcf03#

[HttpContext.Current.User]如何知道哪些用户名存在或不存在?
让我们看一个这样工作的例子。假设你正在使用表单身份验证,并且“OnAuthenticate”事件被触发。这个事件发生在“when the application authenticates the current request”(参考源代码)。
在此之前,应用程序不知道您是谁。
由于您使用的是Forms身份验证,它首先通过调用ExtractTicketFromCookie来解析身份验证cookie(通常为.ASPAUTH)进行检查。接下来,它调用Context.SetPrincipalNoDemand,将cookie转换为用户并将其填充到Context.User(引用源)中。

shstlldc

shstlldc4#

假设一个网络环境,其中一个“用户”(又名你)必须登录。通常这是一个用户ID(UID)和一个密码(PW)。好吧,你的身份是什么,或者你是谁?你是UID,这从你的登录会话中收集“名称”。简单!它也应该在需要你登录的互联网应用程序中工作,如百思买和其他。
当我打开我需要使用的Web应用程序的默认页面时,这将从我的会话中提取我的UID或“名称”。现在,在我的示例中,我是域的一部分,因此我可以使用初始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),并可以在屏幕上显示它。

j8ag8udp

j8ag8udp5#

还要检查一下

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

如果你发现任何类似的东西,只需删除:

<remove name="FormsAuthentication"/>

行从web.config和这里你去它会工作正常,我已经测试过了。

blmhpbnm

blmhpbnm6#

实际上并没有!它只是保存了当前登录用户的用户名。在登录成功认证后,用户名会被登录认证系统自动存储到“HttpContext.Current.User.Identity.Name”属性中。
要检查当前用户是否经过身份验证,必须(出于安全原因)检查自动保存此信息的“HttpContext.Current.User.Identity.IsAuthenticated”布尔属性,而不是编写自己的代码。
如果当前用户未通过身份验证,“HttpContext.Current.User.Identity.Name”属性将为null或空字符串,或者“可以采用其他值”(https://learn.microsoft.com/en-us/dotnet/api/system.security.principal.iidentity.name?view=netframework-4.8),这显然取决于所使用的身份验证模式。
参见:https://learn.microsoft.com/en-us/dotnet/api/system.security.principal.iidentity?view=netframework-4.8

qeeaahzv

qeeaahzv7#

Windows身份验证提供有关登录用户的信息。以下是如何在项目中设置Windows身份验证:
您可以从菜单栏中选择项目,选择您的项目属性,选择调试,并选中“启用Windows身份验证”,如下图所示,

则可以通过在任何控制器中运行此代码来了解登录的用户

var strUserName = User;
mnemlml8

mnemlml88#

当在.NET中发出HTTP请求并使用HttpContext.Current.User.Identity.Name属性检索当前用户的名称时,HTTP请求中不会发送任何特定的标头。
相反,当用户登录到.NET Web应用程序时,将在用户的浏览器中设置身份验证Cookie。此Cookie将在用户浏览Web应用程序时发出的所有后续请求时发送。此Cookie包含身份验证信息,如用户名和安全令牌,用于在服务器上验证用户的身份。
调用HttpContext.Current.User.Identity.Name属性时,.NET使用存储在Cookie中的身份验证信息来标识当前用户并检索其名称。在HTTP请求中不发送特定的标头来检索此信息,而是使用存储在身份验证Cookie中的信息,该信息在用户发出的每个后续请求中发送。
如果IIS服务器配置为使用Windows身份验证,则在用户成功通过身份验证后,服务器将自动生成身份验证令牌。
要访问服务器端生成的鉴权令牌,可以访问服务器端的HttpContext.Current.User.Identity属性,Identity对象中包含了鉴权用户的用户名、安全角色等信息。
在HTTP请求的情况下,身份验证令牌将以身份验证cookie的形式自动发送给客户端。客户端可以在向服务器发送的后续请求中包含此cookie,以验证其身份。
需要注意的是,使用Windows身份验证和访问身份验证令牌的方式可能会因服务器实现和所使用的开发平台而异。因此,建议查阅相应的文档以了解更多信息。
若要确切了解IIS服务器正在使用的Windows身份验证机制,可以执行以下步骤:
1.打开服务器上的Internet信息服务(IIS)管理器。
1.在导航树中,选择要检查的网站。
1.点击右侧功能面板中的“身份验证”图标。
1.在身份验证提供程序列表中,您将看到为网站启用的Windows身份验证机制列表。
通常,IIS中有各种可用的Windows身份验证机制,如基本身份验证、NTLM身份验证、Kerberos身份验证、集成Windows身份验证等。
如果您想了解有关如何在服务器上进行身份验证的详细信息,可以从列表中选择一种Windows身份验证机制,然后单击“编辑”以获取有关其配置和操作的详细信息。您还可以查阅有关如何在IIS中配置和使用Windows身份验证的Microsoft文档。

相关问题