c# - IIS 8.5 事件代码 4009 Viewstate 使用应用程序池标识失败
问题描述
我们正在尝试通过为每个站点使用唯一的应用程序池,并在应用程序池标识下运行这些应用程序池,从而为网站实施良好的 IIS 8.5 实践。我们一直在域帐户下运行我们的应用程序池。我们已经能够成功地切换到使用应用程序池标识和 web 服务。但是对于使用 Windows 身份验证的网站,使用应用程序池的应用程序池标识,该站点会出错。在 Windows 应用程序事件日志中,关联的错误是“事件代码 4009 - 视图状态验证失败: : 视图状态完整性检查失败”。该网站本身给用户一个未经授权的消息。它使用 WindowsPrincipal.IsInRole 方法来确定用户是否在 AD 组中。
关于这个问题的一些帖子提到了更新 machine.config 中的密钥。这是一个独立的服务器。一旦我将站点的相同应用程序池切换回使用域帐户,它就可以工作。
Windows Server 2012,.NET 框架 4.0,u
解决方案
基本问题在于使用 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”。
因此,在该域名下自然找不到任何组成员身份。
推荐阅读
- ionic-framework - 错误错误:未捕获(承诺):NullInjectorError:R3InjectorError(RegisterPageModule)[AccessProviders - > AccessProviders]
- c - exit(21) 代表什么?可以用 exit(1) 代替吗?
- c# - 使用实体框架将日期作为字符串传递给 Crystal Report
- excel - 如何将变量从表单传递到工作簿 VBA
- c++ - 尝试在自定义类(ESP8266)中使用 NTPClient 时出现异常
- machine-learning - 如何解决这个损失是这个带有 GRU 的 RNN 的 PyTorch 中的 NaN 问题?
- python - 如何用 matplotlib.pyplot 画一个圆
- java - 对于什么类型的 A 和 B,简单的赋值语句 A = B 在 Java 中合法但在 C# 中不合法?
- node.js - 如果偏移量在文件范围内,为什么 Node.js 会抱怨 ERR_OUT_OF_RANGE?
- amazon-web-services - 如何优雅地关闭 Amazon ECS Fargate 任务?