IIS意外地使用AuthenticationType = Negotiate对App Pool用户进行身份验证

时间:2012-11-22 01:01:50

标签: c# asp.net iis asp.net-web-api

我有一个WebAPI应用程序,希望使用Forms authenticnticaiton,或我自己的自定义Basic或Digest身份验证。它适用于大多数服务器。但是在一些服务器上它不起作用。

我发现当身份验证失败时,这是因为IIS已对App Pool用户进行了身份验证。 Thread.CurrentPrincipal.Identity.AuthenticationType =“Negotiate”。 AFAIK这是Windows身份验证。但是,对于相关网站已禁用Windows身份验证,我甚至在服务器上卸载Windows身份验证功能时仍然遇到了同样的问题。

我发现将runAllManagedModulesForAllRequests设置为true将解决此问题,尽管这不是一个理想的解决方法,因为它会增加所有请求的开销,即使是那些通过静态处理程序运行的请求。

如果有人能告诉我为什么会这样,或者如何在IIS上调试身份验证过程,那将非常有帮助。

编辑:IIS7 / 7.5集成管道如果有所作为

1 个答案:

答案 0 :(得分:1)

在遇到类似问题时,这是我的观察和建议。

该问题可能与匿名user account有关,后者用作匿名用户身份。默认设置可能是问题。请在这里阅读更多详细信息:

摘要

使用IIS 7.0 UI,转到身份验证页面并选择匿名身份验证。然后在右键单击Edit并选择要用于此的用户。如果此(新选择的)用户可以访问所有静态文件,则所有用户都应该开始工作。选择App Pool Identity将授予为当前池用户帐户指定的访问权限。

默认值为IUSR,在此处详细描述:

Missing IUSR account on Windows Server 2008 R2 / IIS7.5