【发布时间】:2019-02-19 02:26:26
【问题描述】:
我继承了一个旧的 asp.net 网络应用程序。登录过程的一部分旨在收集 windows 用户名(而不是进程用户名)。这曾经工作(几年前),但系统的新编译返回应用程序池名称/用户名而不是 Windows 用户名。
用户名是网站认证前收集的,最初使用的是HttpContext.Current.User.Identity.Name 我已经尝试了所有其他建议的选项,结果没有改变。
string loginName;
loginName = Environment.UserName;
loginName = System.Windows.Forms.SystemInformation.UserName;
loginName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
loginName = HttpContext.Current.User.Identity.Name;
loginName = System.Security.Principal.WindowsIdentity.GetCurrent().Name;
loginName = System.Windows.Forms.SystemInformation.UserName;
loginName = System.DirectoryServices.AccountManagement.UserPrincipal.Current.SamAccountName;
loginName = System.DirectoryServices.AccountManagement.UserPrincipal.Current.UserPrincipalName;
我一次尝试了这些(不是一起尝试),并且在目标环境中只获得了应用程序池名称或应用程序池用户名。 我已经尝试过 IIS 中的所有身份验证组合,唯一不同的是 ASP.NET 模拟,它从应用程序池名称更改为模拟用户名。
在我的本地 PC 上,从 Visual Studio 启动,它们都可以返回 Windows 登录用户名。
我对 asp.net 网络应用还很陌生,我不知道还能尝试什么。
【问题讨论】:
-
WebForms 开发者应该使用“
Form.User. -
确保
Anonymous Authentication在IIS中被禁用 -
这是我唯一有效的身份验证。如果我删除该页面不会呈现。
-
我正在处理 .aspx 页面的 Page_Load 事件,Form 对象可用但没有 .User 组件。有一个 Form.Page.User.Identity.Name 选项 - 但这似乎是一个经过身份验证的用户 - 我们还没有做到这一点......