首页 > 解决方案 > 如何在 Page_Load 时自动确定 Windows 用户的用户名?

问题描述

是否可以自动确定 Windows 用户的用户名,而无需用户使用其用户名和密码登录 Web 应用程序?该用户当然会使用相同的 Active Directory 用户名登录到 Windows。

到目前为止,我看到的是,如果我在 IIS 中设置了 Web 应用程序,则使用具有NetworkService身份的应用程序池作为应用程序用户(直通身份验证)连接,并且使用的应用程序池和具有Read & executeList folder contentsRead访问权限,然后发生以下三种情况之一:

  1. 启用匿名身份验证和表单身份验证后,网页返回 IIS 的主机名为 Environment.UserName,因此无法自动获取用户的用户名。
  2. 启用匿名身份验证、启用 ASP.NET 模拟和启用表单身份验证后,网页将IUSR作为 Environment.UserName 返回,因此无法自动获取用户的用户名。
  3. 启用 Windows 身份验证后,会弹出一个窗口,询问用户的用户名和密码。

我在 Page_Load 上查看 Environment.UserName:

    protected void Page_Load(object sender, EventArgs e)
    {
        //Set username on interface
        txtUsername.Text = Environment.UserName;
    }

如果我向用户询问凭据,我会使用:

//Determine if user entered the correct username and password
bool AuthenticatedViaAD = DomainContext.ValidateCredentials(loginModule.UserName, loginModule.Password);

我希望在不询问用户用户名的情况下使用的是:

//Get current user
UserPrincipal currentUser = UserPrincipal.FindByIdentity(DomainContext, Environment.UserName);

Page.User.Identity.Name 会在用户输入其用户名和密码并启用 Windows 身份验证后进行适当的填充:

txtPageUser.Text = Page.User.Identity.Name;

标签: c#windowsiisactive-directory

解决方案


这可能是由于浏览器安全策略(如果输入您的 Windows 凭据确实有效)

IE 和大多数其他浏览器不会将 Windows 身份验证提交给不受信任的网站或 Intranet 网站,因为这是明显的安全风险。

尝试将该站点添加到您的受信任站点列表中,看看是否可以解决您的问题。


推荐阅读