在 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 Authentication
在 IIS
中被禁用
这是我唯一有效的身份验证。如果我删除该页面不会呈现。
我正在处理 .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 应用程序)
当它设置为 ApplicationPoolIdentity 时,如何设置 IIS 应用程序池标识用户区域设置