401 – 未经授权:使用App Pool Identity在IIS 7.5中运行的Web应用程序拒绝访问错误

我有一个Windows 2008服务器,IIS 7.5上的ASP.NET应用程序。

当我尝试访问网站时,我得到一个loginpopup窗口。 如果我点击“取消”,我得到一个401 – 未经授权:访问由于凭据无效而被拒绝。 该应用程序正在使用Windows身份validation(匿名被禁用)。
该应用程序拥有自己的应用程序池,在应用程序池标识下运行。 如果我将应用程序池更改为在NetworkService帐户下运行,则我的网站function正常。

我猜这只是一个权限问题,但无法弄清楚我需要更改哪些权限。
我在应用程序的物理目录上提供了应用程序池标识权限,但是这并没有解决问题。

当我将我的IIS应用程序池帐户从NetworkService切换到域用户帐户时,也出现了此问题。 我无法访问外部网站(401 – 未经授权),但在服务器本身,我可以访问该网站。

该问题似乎与Kerberos身份validation相关联。 IIS 7首先尝试使用Kerberos,并且无法正确进行身份validation – (必须要求更多configuration)。 如果您禁用Kerberos,您可能会发现您实际上可以从外部机器访问该网站:

您可以执行快速testing,以检查您的问题是否与Kerberos身份validation相关:

  • 在Internet Explorer中打开工具> Internet选项>高级>安全>启用Windows集成身份validation – 请检查此选项。 这迫使IE只使用NTLM进行身份validation与您的网站(或任何网站)。 如果您可以成功进行身份validation,那么您的问题是Kerberos未完全configuration。

当我将网站从IIS6(默认为NTLM)迁移到7(默认为Kerberos)时,我几次发生这个问题。 我不想configurationKerberos,所以相反,我强迫我的IIS Web服务器使用以下命令只有NTLM:cscript“F:\ inetpub \ AdminScripts \ adsutil.vbs”set w3svc / NTAuthenticationProviders“NTLM”

默认值是“Negotiate,NTLM”。 要检查您的现有值,请使用:cscript“F:\ inetpub \ AdminScripts \ adsutil.vbs”获取w3svc / NTAuthenticationProviders

如果有人对Kerberos身份validation失败的原因有了更深的了解,请让我知道。 另外,如果有人知道如何强制NTLM身份validation只为特定的应用程序池而不是整个IIS Web服务器,请让我知道。

在大多数情况下,授予对内容的应用程序池标识访问权限应该足够了。 由于它仍然提示,但不适用于NetworkService,我的猜测是,一个子文件夹没有得到你添加的新权限,或者有另一个依赖,该网站有类似的registry。

尝试使用标准的.htm页面来确认网站的根目录是否正常工作。 仔细检查是否授予正确的应用程序池标识,并将其授予正确的path。