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

Posted

技术标签:

【中文标题】在 IIS Web 应用程序中,如何获取 Windows 用户名? - 不是进程用户名【英文标题】:in an IIS web app, how do I get the windows user name? - not the process username 【发布时间】: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 AuthenticationIIS 中被禁用 这是我唯一有效的身份验证。如果我删除该页面不会呈现。 我正在处理 .aspx 页面的 Page_Load 事件,Form 对象可用但没有 .User 组件。有一个 Form.Page.User.Identity.Name 选项 - 但这似乎是一个经过身份验证的用户 - 我们还没有做到这一点...... 【参考方案1】:

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

【讨论】:

在这种情况下,事实证明,要获取 windows 用户名,我只需要为一个 aspx 页面提供 windows 身份验证,而只为站点的其余部分提供匿名身份验证。该页面充当一种“看门人”,允许通过 Windows 身份验证的用户通过使用数据库中的用户 ID 设置会话令牌/cookie 来访问该站点 - 如果通过“门”。 太棒了特雷弗!您现在可以将其用作企业内的单点登录服务! 我将投票给列夫,因为他的解决方案会奏效。原来我不需要这么复杂的解决方案!

以上是关于在 IIS Web 应用程序中,如何获取 Windows 用户名? - 不是进程用户名的主要内容,如果未能解决你的问题,请参考以下文章

如何在 .NET Web 应用程序中为经过身份验证的用户获取 UPN,而不查询 Active Directory

如何在 IIS 中授予 Web api 应用程序写入权限?

获取 IIS 条目的元数据库路径(安装已停止,因为指定的路径不是有效的 Web 应用程序)

当它设置为 ApplicationPoolIdentity 时,如何设置 IIS 应用程序池标识用户区域设置

如何在 Web 应用程序(ASP.Net、C#、IIS)中进行文件上传

如何在本地 IIS 而非 Express 中调试 ASP.NET 5 Web 应用程序