在 IIS 7 中使用自定义帐户作为应用程序池时出现 500 错误

在 IIS 7 中使用自定义帐户作为应用程序池时出现 500 错误

我有一个非常简单的站点,其中只有 Windows Server 2008 SP2 上 IIS 7 中的静态文件。

当我尝试访问任何静态文件时,我收到 500 错误。如果我将 html 文件重命名为具有 aspx 扩展名,则它可以正常工作。

当使用内置身份作为应用程序池时,网站也能正常工作。当我切换到使用自定义帐户作为应用程序池时,就会出现问题。我尝试使用本地和域帐户来运行应用程序池。

我已将网站目录和文件的完全控制权授予这些帐户。

打开跟踪会显示以下错误消息:
ModuleName:IIS Web Core
通知:2
HttpStatus:500
HttpReason:内部服务器错误
HttpSubStatus:0
ErrorCode:2147943746
ConfigExceptionInfo
通知:AUTHENTICATE_REQUEST
ErrorCode:未提供所需的模拟级别,或者提供的模拟级别无效。(0x80070542)

我用谷歌搜索错误代码,但没有任何结果。

答案1

问题解决:本地安全策略中的“身份验证后模拟客户端”缺少 IIS_IUSRS 组。

答案2

在我的环境中,由于组策略设置,我不允许更改“身份验证后模拟客户端”设置,也不允许添加应用程序池用户本地管理员,因此我开始寻找模拟发生的原因。默认情况下,匿名身份验证设置为使用 IUSR 用户,因此应用程序池用户正在尝试模拟它。

我已将匿名用户身份更改为“应用程序池身份”,因此无需模拟。 匿名身份验证作为应用程序池标识

答案3

Windows Server 2016,IIS 10。

当我赋予自定义账户管理员权限时,这个问题可以解决。但我担心全局管理员会删除此账户的管理员权限。所以我不得不寻找其他解决方案。

我无法添加“身份验证后模拟客户端”。 图片描述

我也尝试了 Petar Weigand 的方法,但是对我没有作用。

经过多次尝试,我发现将自定义账户添加到“连接为”可以解决问题。 图片描述

答案4

除了布朗尼的回答(这是正确的,您必须将此权限授予应用程序池帐户);如果在您使用 WCF 客户端调用它时 IIS 向您发送此错误(+ 在 IIS 中启用了 Windows 身份验证),则可能是因为给予 IIS 的 NTLM 令牌的标志不允许它模拟调用者。

修改您的客户端的配置(默认):

<behavior name="NewBehavior">
  <clientCredentials>
    <windows allowedImpersonationLevel="Identification" />
  </clientCredentials>
</behavior>

对此:

<behavior name="NewBehavior">
  <clientCredentials>
    <windows allowedImpersonationLevel="Impersonation" />
  </clientCredentials>
</behavior>

有关详细信息,请查看此文章:WCF 中的模拟和委托

相关内容