如何设置.NET Windows身份验证 - 当我希望它使用实际用户时,该名称始终显示为“IIS APPPOOL \ Classic .NET AppPool”

时间:2011-05-19 15:45:07

标签: c# .net kerberos windows-identity

我正在使用以下代码通过Kerberos进行身份验证。

IntPtr logonToken = WindowsIdentity.GetCurrent().Token;
string authenticationType = "WindowsAuthentication";
WindowsIdentity windowsIdentity = new WindowsIdentity(logonToken, authenticationType);

//windowsIdentity.Name == equals "IIS APPPOOL\Classic .NET AppPool" when I want it to be the user

这只有在我尝试运行我的.NET应用程序Web服务器时才会发生。如果我在我的机器上本地运行代码进行调试,它会在Name属性中显示我的用户ID。有关如何在Web服务器上运行的任何建议吗?

2 个答案:

答案 0 :(得分:4)

您需要enable impersonation in web.config

  

要将ASP.NET配置为模拟IIS提供的Windows身份作为ASP.NET应用程序的WindowsIdentity,请编辑应用程序的Web.config文件,并将身份配置元素的impersonate属性设置为true,如图所示在以下示例中。

<configuration>
  <system.web>
    <identity impersonate="true" />
  </system.web>
</configuration>

当您在本地运行代码进行调试时,您可能正在使用以登录用户身份运行的Web开发服务器,这就是您在调试中会看到正确用户的原因。

答案 1 :(得分:0)

您的问题是,您的IIS服务器以其自己的身份运行,而不是您的身份。因此,WindowsIdentity.GetCurrent().Token将返回IIS工作进程的标识。

您可以使用IIS管理器控制台将您的网站配置为以不同的身份(包括您的身份)运行:  enter image description here