如何根据Page_Load自动确定Windows用户的用户名?

时间:2018-11-15 16:51:56

标签: c# windows iis active-directory

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

到目前为止,我所看到的是,如果我在IIS中使用 NetworkService 的应用程序池以 Application用户(通过身份验证)的身份连接了Web应用程序, strong>身份和 NetworkService 具有读取并执行列出文件夹内容 Read 访问权限,然后是以下三个之一事情发生了:

  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);
用户在启用Windows身份验证的情况下输入其用户名和密码后,

Page.User.Identity.Name 会适当填充:

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

1 个答案:

答案 0 :(得分:2)

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

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

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