使用 Windows 身份验证检索客户端用户名

发布于 2024-07-19 07:17:30 字数 222 浏览 3 评论 0原文

我正在尝试检索在 ASP.NET 中登录到我们 Intranet 上的计算机的人员的用户名和客户端计算机名称。 这仅用于记录目的。 我检索用户名“System.Security.Principal.WindowsIdentity.GetCurrent().Name”,问题是访问此站点的任何人都显示相同的用户名(即我部署应用程序的服务器名称)。 请帮忙。 我在 web.config 中使用 Windows 身份验证模式。

I'm attempting to retrieve the user name and client machine name of the person logged on to a computer on our intranet in ASP.NET. This is just for logging purposes. I retrieve the user name "System.Security.Principal.WindowsIdentity.GetCurrent().Name", problem is whoever accessing this site showing the same username (that is server name where I have deployed my application) for all. Please help. I am using windows authentication mode in web.config.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

美人迟暮 2024-07-26 07:17:30

用户名可以如@Mehrdad<所述/a>. 对于用户计算机的名称,您可以使用 HttpRequest 对象,如下所示:(

if(Request.IsAuthenticated)
    string userName = Request.LogonUserIdentity.Name;
string machineAddress = Request.UserHostAddress;
string machineName = Request.UserHostName;

编辑)

在 web.config 文件中,我使用此行:

<system.web>
    <authentication mode="Windows"/>
</system.web>

在 default.aspx.cs 中,我使用此行:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        StringBuilder sb = new StringBuilder();

        if (Request.IsAuthenticated)
        {
            sb.AppendFormat("User Name: {0}<br/>", Request.LogonUserIdentity.Name);
        }
        else
        {
            sb.Append("Request not authenticated");
        }

        sb.AppendFormat("Machine Address: {0}<br/>", Request.UserHostAddress);
        sb.AppendFormat("Machine Name:    {0}<br/>", Request.UserHostName);

        lblTest.Text = sb.ToString();
    }
}

这会产生以下输出:

用户名:HPAS\amantur

机器地址:127.0.0.1

机器名称:127.0.0.1

The name of the user can be have as described by @Mehrdad. For the name of the user's machine you can use HttpRequest object like this:

if(Request.IsAuthenticated)
    string userName = Request.LogonUserIdentity.Name;
string machineAddress = Request.UserHostAddress;
string machineName = Request.UserHostName;

(edit)

In the web.config file I'm using this line:

<system.web>
    <authentication mode="Windows"/>
</system.web>

In the default.aspx.cs I'm using this:

public partial class _Default : System.Web.UI.Page
{
    protected void Page_Load(object sender, EventArgs e)
    {
        StringBuilder sb = new StringBuilder();

        if (Request.IsAuthenticated)
        {
            sb.AppendFormat("User Name: {0}<br/>", Request.LogonUserIdentity.Name);
        }
        else
        {
            sb.Append("Request not authenticated");
        }

        sb.AppendFormat("Machine Address: {0}<br/>", Request.UserHostAddress);
        sb.AppendFormat("Machine Name:    {0}<br/>", Request.UserHostName);

        lblTest.Text = sb.ToString();
    }
}

This is proucing following output:

User Name: HPAS\amantur

Machine Address: 127.0.0.1

Machine Name: 127.0.0.1

空宴 2024-07-26 07:17:30

您使用的代码将获取与当前线程关联的WindowsIdentity(这是运行 ASP.NET 的标识)。 除非您根据客户端用户身份进行模拟,否则这是行不通的。 你需要使用这个:

HttpContext.Current.User.Identity.Name

The code you are using will get the WindowsIdentity associated with the current thread (which is the identity ASP.NET is running on). Unless you are impersonating based on client user identity that won't work. You need to use this:

HttpContext.Current.User.Identity.Name
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文