如何使用WindowsIdentity.Impersonate获取用户的登录信息,而不是ASPNET帐户

时间:2009-10-20 14:33:37

标签: asp.net vb.net impersonation windows-authentication

我有一个网络应用程序,它将驻留在生产服务器上,我想让用户登录计算机名称,大约

  

DOMAINNAME / USERNAME

许多人告诉我,我必须使用模拟/委派才能获得此功能,但除此之外没有提供任何详细信息。最初,我的测试使用了:

Response.Write("HttpContext: " & HttpContext.Current.User.Identity.Name & " \n")
Response.Write("Windows Identity: " & WindowsIdentity.GetCurrent.Name & " \n")
Response.Write("Thread: " & Thread.CurrentPrincipal.Identity.Name & " \n")
Response.Write(Request.ServerVariables("LOGON_USER"))
Response.Write(User.Identity.Name)

在我的本地cassini服务器上产生有效结果,但在发布时不会产生。添加以下行:

Dim ctx As WindowsImpersonationContext = WindowsIdentity.Impersonate(IntPtr.Zero)

将WindowsIdentity更改为

  

SERVERNAME \ ASPNET

但是,我希望当前用户(不是服务器的)用户名。如何操纵模拟课程给我这个?

修改 在Heinzi的评论中提供的解决方案似乎是正确的。但是,我相信这只是IE6。我工作的公司可能会在不久的将来转向IE8,我希望至少确保IE 6/7/8的功能。这可能吗?

1 个答案:

答案 0 :(得分:1)

你需要

  • 在IIS中激活Windows集成身份验证,
  • 在IIS或您的web.config文件(<authorization>部分)中关闭匿名用户,
  • 在您的web.config的<identity impersonate="true" />部分添加<system.web>

编辑This question显示来自web.config的相关部分。

相关问题