![401 - 未经授权:使用应用程序池标识在 IIS 7.5 中运行的 Web 应用程序的访问被拒绝错误](https://linux22.com/image/543984/401%20-%20%E6%9C%AA%E7%BB%8F%E6%8E%88%E6%9D%83%EF%BC%9A%E4%BD%BF%E7%94%A8%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E6%B1%A0%E6%A0%87%E8%AF%86%E5%9C%A8%20IIS%207.5%20%E4%B8%AD%E8%BF%90%E8%A1%8C%E7%9A%84%20Web%20%E5%BA%94%E7%94%A8%E7%A8%8B%E5%BA%8F%E7%9A%84%E8%AE%BF%E9%97%AE%E8%A2%AB%E6%8B%92%E7%BB%9D%E9%94%99%E8%AF%AF.png)
我在 Windows 2008 服务器 IIS 7.5 上有一个 ASP.NET 应用程序。
当我尝试访问网站时,会出现登录弹出窗口。如果我单击“取消”,则会收到 401 - 未授权:由于凭据无效,访问被拒绝。该应用程序正在使用 Windows 身份验证(匿名已禁用)。该
应用程序有自己的应用程序池,在应用程序池标识下运行。如果我将应用程序池更改为在 NetworkService 帐户下运行,我的网站就可以正常运行。
我猜这只是一个权限问题,但不知道我需要更改什么权限。
我授予了应用程序池标识对应用程序物理目录的权限,但这并没有解决问题。
答案1
当我将 IIS 应用程序池帐户从 NetworkService 切换到域用户帐户时,也遇到了此问题。我无法从外部访问该网站(401 - 未授权),但在服务器上我可以访问该网站。
该问题似乎与 Kerberos 身份验证有关。IIS 7 首先尝试使用 Kerberos,但无法正确进行身份验证 -(必须进行更多配置)。如果禁用 Kerberos,您可能会发现您实际上可以从外部机器访问该网站:
您可以通过以下方式执行快速测试来检查您的问题是否与 Kerberos 身份验证有关:
- 在 Internet Explorer 中打开“工具”>“Internet 选项”>“高级”>“安全”>“启用 Windows 集成身份验证”- 取消选中此选项。这将强制 IE 仅使用 NTLM 对您的站点(或任何站点)进行身份验证。如果您可以成功进行身份验证,则您的问题是 Kerberos 未完全配置。
当我将网站从 IIS6(默认为 NTLM)迁移到 7(默认为 Kerberos)时,这个问题出现了好几次。我不想配置 Kerberos,所以我用以下命令强制我的 IIS Web 服务器仅使用 NTLM:cscript "F:\inetpub\AdminScripts\adsutil.vbs" set w3svc/NTAuthenticationProviders "NTLM"
默认值为“Negotiate,NTLM”。要检查现有值,请使用:cscript“F:\inetpub\AdminScripts\adsutil.vbs”get w3svc/NTAuthenticationProviders
如果有人对 Kerberos 身份验证失败的原因有更深入的了解,请告诉我。此外,如果有人知道如何仅对特定应用程序池而不是整个 IIS Web 服务器强制执行 NTLM 身份验证,也请告诉我。
答案2
在大多数情况下,授予应用程序池身份对内容的访问权限就足够了。由于它仍然会提示,但 NetworkService 不会提示,所以我猜想某个子文件夹没有获得您添加的新权限,或者该站点对注册表之类的东西有其他依赖关系。
尝试使用标准 .htm 页面来确认站点的根目录是否正常工作。仔细检查是否授予了正确的应用程序池标识以及是否将其授予了正确的路径。