5

我正在使用以下代码通过 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。关于如何让它在网络服务器上工作的任何建议?

4

2 回答 2

3

您需要在 web.config 中启用模拟

要将 ASP.NET 配置为将 IIS 提供的 Windows 标识模拟为 ASP.NET 应用程序的 WindowsIdentity,请编辑应用程序的 Web.config 文件并将标识配置元素的模拟属性设置为 true,如下所示例子。

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

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

于 2011-05-19T16:09:26.440 回答
1

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

您可以使用 IIS 管理器控制台将您的网站配置为以不同的身份(包括您的身份)运行: 在此处输入图像描述

于 2011-05-19T15:54:41.393 回答