绕过应用程序池中的服务ID以确定用户ASP.NET C的实际用户名#

绕过应用程序池中的服务ID以确定用户ASP.NET C的实际用户名#,asp.net,c#-4.0,iis-7,windows-server-2008-r2,application-pool,Asp.net,C# 4.0,Iis 7,Windows Server 2008 R2,Application Pool,我有一个网站,它使用带有服务ID的应用程序池连接到数据库。我希望能够在网页上填充一个文本框,显示他们的实际windows登录名,而不是与应用程序池关联的服务ID。我需要这个,这样我就可以使用这些信息在gridview上进行一些过滤,该gridview根据用户名显示数据库中的一些数据。目前我尝试了几种不同的方法 Environment.UserName 这将获取用于访问数据库的服务ID System.Security.Principal.WindowsIdentity.GetCurrent().

我有一个网站,它使用带有服务ID的应用程序池连接到数据库。我希望能够在网页上填充一个文本框,显示他们的实际windows登录名,而不是与应用程序池关联的服务ID。我需要这个,这样我就可以使用这些信息在gridview上进行一些过滤,该gridview根据用户名显示数据库中的一些数据。目前我尝试了几种不同的方法

Environment.UserName
这将获取用于访问数据库的服务ID

System.Security.Principal.WindowsIdentity.GetCurrent().Name;
//Both of these return the same results described below.
HttpContext.Current.User.Identity.Name;
//and
System.Threading.Thread.CurrentPrincipal.Identity.Name;
这还会获取用于访问数据库的服务ID

System.Security.Principal.WindowsIdentity.GetCurrent().Name;
//Both of these return the same results described below.
HttpContext.Current.User.Identity.Name;
//and
System.Threading.Thread.CurrentPrincipal.Identity.Name;
这两个有点奇怪。当我通过vs2010进行调试时,他们会得到我的用户名,但当我将文件复制到服务器上时,它将运行在服务器上,并使用应用程序池,它不会得到任何信息。我已将其设置为显示在home.aspx页面的文本框中

在这方面的任何帮助都将不胜感激,因为我已经到处找了,找不到任何针对我的情况的信息

提前谢谢

当前使用的实际代码:(从服务器运行时不返回任何内容)


编辑:包含我尝试过的新方法。

我认为您尝试的是不可能的。它在调试时看到您的原因是VS正在运行该站点,并且在您的用户名下运行

当您将应用程序部署到服务器时,在那里运行的代码无法访问用户的计算机-因此无法找到用户名

您可以在用户的机器上运行一些Javascript,但我认为不可能从中获取本地机器用户名

更新:好吧,如果用户以某种方式登录到该站点,那就不同了——我误解了这个问题。您可以尝试从以下位置获取:

System.Threading.Thread.CurrentPrincipal.Identity.Name


所以这是一个简单的修复,使用了我之前展示的方法之一

string UserName = System.Threading.Thread.CurrentPrincipal.Identity.Name;

棘手的部分是IIS配置。一旦我们发现,匿名身份验证被禁用会强制用户登录ID,它工作正常。

那么它为什么要使用HttpContext呢?在我看来,它会很好地工作。。。我不明白为什么我不能从中得到这些信息。顺便说一下,这是一个内部网站。它将只对我公司的用户可用。他们必须通过active directory进行访问,这就是我要寻找的用户名。如果有人有其他方法得到这个,我会感谢你的帮助!!!未意识到用户已登录到您的网站。请参阅我的更新。尝试了System.Threading.Thread.CurrentPrincipal.Identity.Name方式,但当我从服务器运行它时,它仍然返回空字符串。在对服务ID进行身份验证之前,必须有一种获取用户用户名的方法。我真的被困在这个问题上了,我也愿意考虑其他的方法来解决这个问题。我很抱歉,但我真的认为网站不知道用户的情况。是的,您可能必须通过广告登录才能访问它,但这可能只是在网络上打开一条路由,以便您可以访问url。我会和你们的网络伙伴核实一下。