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

时间:2014-10-01 19:55:51

标签: 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().Name;

这也获取了用于访问数据库的服务ID。

//Both of these return the same results described below.
HttpContext.Current.User.Identity.Name;
//and
System.Threading.Thread.CurrentPrincipal.Identity.Name;

这两个有点奇怪。当我通过vs2010进行调试时,他们获取了我的用户名,但是当我将文件复制到服务器时,这将运行并使用应用程序池让它没有任何帮助。我把它设置为在home.aspx页面的文本框中显示。

任何对此的帮助都会非常感激,因为我到处寻找,无法找到任何特定于我的情况的信息。

提前致谢!!

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

if (!IsPostBack)
        {
            string filterName = HttpContext.Current.User.Identity.Name;
            IDFilterTextBox.Text = filterName;
        }

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

2 个答案:

答案 0 :(得分:0)

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

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

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

更新:好的,如果用户以某种方式登录到网站,那就不同了 - 我误解了这个问题。您可以尝试从以下网址获取:

  

System.Threading.Thread.CurrentPrincipal.Identity.Name

答案 1 :(得分:0)

所以这是一个简单的解决方案,使用我之前展示过的方法之一。

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

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