繁体   English   中英

在IIS Web应用程序中,如何获取Windows用户名? -不是进程用户名

[英]in an IIS web app, how do I get the windows user name? - not the process username

我继承了一个旧的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模拟,它从应用程序池名称更改为模拟用户名。

在从Visual Studio启动的本地PC上,它们都可以返回登录的Windows用户名。

我对asp.net网络应用程序还很陌生,而且我不知道还能尝试什么。

您偶然发现了答案。 如果希望服务器自动认识Windows用户,则需要将该Windows用户的凭据传递给应用程序。 如果使用Kerberos或NTML身份验证选项(Windows身份验证),则会自动传递一组凭据。 否则,您需要提示用户输入凭据。 您不必使用模拟,但是如果您的应用程序池用户具有对dc目录的足够访问权限,则可以以编程方式模拟已登录的用户。 有关更多信息,请访问: https : //docs.microsoft.com/zh-cn/previous-versions/msp-np/ff647405(v=pandp.10)#impersonating-the-original-caller-programmatically

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM