如何获取 Windows 客户端用户 ASPX C#



我已经在StackOverflow上查看并尝试了数十个"答案",但没有一个有效。 我有一个非常简单的aspx页面,其中包含C#代码。 该网站位于 Windows 2008R2 服务器上。 网站看起来像(实际名称已更改(:

MyServer - set for Anonymous Authentication  
Application Pools
ASP.NET v4.0 Classic - .Net 4.0, Classic pipeline, App Pool Identity
MySiteAppPool - .Net 2.0, Integrated, runs under a Domain-wide Service identity (call it "mycompanydomservice")
Sites
MyMainSite - Windows Authentication, uses "MySiteAppPool"
"AutoPrint" - my web app, Windows Authentication, uses "ASP.Net v4.0 Classic" app pool, ASP.NET Impersonation enabled

我的"自动打印"Web应用程序有一个起始页"自动打印.aspx"和代码隐藏("自动打印.aspx.cs",以及几个类(。

服务器和主站点不可更改,因为此站点下还有其他几个应用程序。

用户当前使用以下命令调用此应用:

http://MyServer/AutoPrint
Everything I have tried is returning the "mycompanydomservice" result:
Request.LogonUserIdentity.Name.ToString() - returns "mycompanydomservice"
System.Environment.UserName.ToString() - returns "domservice"
System.Security.Principal.WindowsIdentity.GetCurrent().Name.ToString() - returns "mycompanydomservice"

我在这里错过了什么? 为什么这么难?

进一步澄清: "mycompany\domservice" - "domservice"帐户只是"mycompany"域中的一个ActiveDirectory帐户,该帐户有权读取/写入站点和其他应用程序所需的目录。 在安装网站和其他网络应用程序时,我们将该帐户用作"连接身份"用户。

我正在尝试做的是获取打开浏览器并访问此应用程序的人的Windows用户帐户的ActiveDirectory名称。 如果用户"JJONES"登录Windows并使用"http://myserver/autoprint"启动应用程序,我想获取"JJONES"或"mycompany\JJONES"作为用户名。

如果使用匿名认证,则浏览器不会向服务器发送任何凭证(用户 ID/密码(。因此,如果您希望服务器上的客户端用户 ID,则必须使用非匿名身份验证,例如,。窗口或窗体。您可以使用非匿名身份验证,然后允许或拒绝特定用户或用户组或所有用户访问您的网站。

感谢您所有有用的意见/建议。

事实证明,问题是由多种因素共同造成的。 我使用的应用程序池使用的是应用程序池标识(具有有限的权限(,因此我必须在"连接为..."中使用特定帐户(域服务帐户(用于访问某些文件的物理路径凭据。

更改为使用使用具有足够权限的帐户(域服务帐户(的应用程序池允许我离开"连接身份..."转换为应用程序时使用直通身份验证。

瞧 - 我现在使用几乎所有建议的方法获取用户凭据。 经过太多个小时的头敲打键盘......

您是否考虑过使用 HttpContext.User 属性?这将为当前登录的用户提供。在此之后,您可能需要执行一些漂亮的LDAP查询才能从AD获取用户名。 请参阅 https://msdn.microsoft.com/en-us/library/system.web.httpcontext.user(v=vs.110(.aspx

您可能希望在链接"如何使用 C# 按用户名搜索 Active Directory?

希望这对你有帮助。

最新更新