c# - 如何在 Page_Load 时自动确定 Windows 用户的用户名?
问题描述
是否可以自动确定 Windows 用户的用户名,而无需用户使用其用户名和密码登录 Web 应用程序?该用户当然会使用相同的 Active Directory 用户名登录到 Windows。
到目前为止,我看到的是,如果我在 IIS 中设置了 Web 应用程序,则使用具有NetworkService身份的应用程序池作为应用程序用户(直通身份验证)连接,并且使用的应用程序池和具有Read & execute、List folder contents和Read访问权限,然后发生以下三种情况之一:
- 启用匿名身份验证和表单身份验证后,网页返回 IIS 的主机名为 Environment.UserName,因此无法自动获取用户的用户名。
- 启用匿名身份验证、启用 ASP.NET 模拟和启用表单身份验证后,网页将IUSR作为 Environment.UserName 返回,因此无法自动获取用户的用户名。
- 启用 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;
解决方案
这可能是由于浏览器安全策略(如果输入您的 Windows 凭据确实有效)
IE 和大多数其他浏览器不会将 Windows 身份验证提交给不受信任的网站或 Intranet 网站,因为这是明显的安全风险。
尝试将该站点添加到您的受信任站点列表中,看看是否可以解决您的问题。
推荐阅读
- apache-spark - ORC 与 Parquet 文件格式
- reactjs - 如何在提交表单时呈现另一个组件
- javascript - 在 Jest API 测试中发送跟踪信息
- c# - C#/.NET 套接字连接具有相同 IP 的多个部分/套接字绑定到网卡/ip
- c# - ASP.Net Core 3:如何使用默认值创建 @Html.DropDownListFor “只读”?
- pandas - 从熊猫的时间列中删除冒号
- typescript - Ngrx 效果:根据它们的共同属性过滤动作
- javascript - Safari 和 IE 的 MediaRecorder API 是否有替代方案?
- python - 如何使用分类变量对数据框进行分组以在 matplotlib 中制作折线图?
- php - 正则表达式匹配电报用户名并删除 PHP 中的整行