我们正在尝试通过为每个站点使用唯一的应用程序池为网站实施良好的IIS 8.5实践,并在应用程序池标识下运行这些应用程序池。我们一直在域帐户下运行我们的应用池。我们已经能够切换到使用Web服务成功使用应用程序池标识。但是对于使用Windows身份验证的网站,使用应用程序池的应用程序池标识,网站会出错。在Windows应用程序事件日志中,关联的错误是“事件代码4009 - 视图状态验证失败::视图状态失败完整性检查”。网站本身为用户提供未经授权的消息。它使用WindowsPrincipal.IsInRole方法来确定用户是否在AD组中。我知道Windows用户正在传输,因为它显示在asp页面上。
有关此问题的一些帖子提到了machine.config中的更新密钥。这是一个独立的服务器。一旦我将网站的相同应用程序池切换回使用域帐户,presto就可以了。
Windows Server 2012,.NET framework 4.0,u
答案 0 :(得分:1)
基本问题是使用WindowsPrincipal.IsInRole方法和System.Environment变量。
WindowsPrincipal currentPrince = new WindowsPrincipal((WindowsIdentity)identity;
string domainName = System.Environment.Us variableerDomainName;
if currentPrince.IsInRole(domainName + "\\" + groupNane))System
{
bool isAuthenticated = true; '
}
在域帐户下运行时,System.Environment变量包含与身份相同的域。
在AppPoolIdentity伪帐户下运行时,System.Environment变量包含“IIS_AppPool”。
因此,在该域名下无法找到群组成员资格。