我正在使用以下代码通过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服务器上运行的任何建议吗?
答案 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管理器控制台将您的网站配置为以不同的身份(包括您的身份)运行: