在单服务器环境中验证视图状态 MAC 失败

Validation of viewstate MAC failed on Single Server Environment

最近将我们的 .net 4.0 Web 应用程序迁移到了 .net 4.7.2。 设置开发环境,它不是网络场场景。 机器密钥也不是自动生成的。 点击登录页面按钮时出现 'Validation of viewstate MAC failed' 错误。 MAC 验证在 IE 中总是失败,而在 Chrome 中一天只有一两次。

Web.config :

<machineKey decryptionKey="F4B786E157C86740A610D....ghfghhgfh3F5C69,IsolateApps" validationKey="80DAFD9....3hgfhgfAC1CDD71B66820B664160337A4C6179C6C1480C8DA6EFD3C17D34B7BCE11A4ED8C02DD0F...3EC5556C4029084A8871,IsolateApps" validation="AES"/>

尝试了以下方法;

  1. 删除了表单中的操作标签
  2. 在 web.config
  3. 中关闭了 macValidation
  4. 重新生成了机器密钥
  5. 在应用程序池中将 'Virtual Memory Limit' 设置为 0 并将 'Load User Profile' 设置为 true

但运气不好。

错误:

An unexpected error has occurred on this page and it has been logged. Please feel free to contact us with the information listed below:

GUID: feee9d30-5c42-4130-ad8b-174c14ba9dad

Machine Name Date URL 
ZZZ 12/Jun/2019 16:15:22 http://ZZZ:8080/UserManagement/Login.aspx 
-------------------------------------
Error Message : Validation of viewstate MAC failed. If this application is hosted by a Web Farm or cluster, ensure that configuration specifies the same validationKey and validation algorithm. AutoGenerate cannot be used in a cluster. See http://go.microsoft.com/fwlink/?LinkID=314055 for more information.

Source : System.Web

Target Method: Void ThrowError(System.Exception, System.String, System.String, Boolean)

Stack Trace : at System.Web.UI.ViewStateException.ThrowError(Exception inner, String persistedState, String errorPageMessage, Boolean macValidationError) at System.Web.UI.ObjectStateFormatter.Deserialize(String inputString, Purpose purpose) at System.Web.UI.Util.DeserializeWithAssert(IStateFormatter2 formatter, String serializedState, Purpose purpose) at System.Web.UI.HiddenFieldPageStatePersister.Load() at System.Web.UI.Page.LoadPageStateFromPersistenceMedium() at System.Web.UI.Page.LoadAllState() at System.Web.UI.Page.ProcessRequestMain(Boolean includeStagesBeforeAsyncPoint, Boolean includeStagesAfterAsyncPoint)

-------------------------------------
Error Message : Invalid viewstate. Client IP: nn.nmn.nn.nn Port: 56640 Referer: http://ZZZ:8080/UserManagement/Login.aspx Path: /UserManagement/Login.aspx User-Agent: Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 10.0; WOW64; Trident/7.0; .NET4.0C; .NET4.0E; .NET CLR 2.0.50727; .NET CLR 3.0.30729; .NET CLR 3.5.30729) ViewState: N9AFLjJRk5zRjomBHUnBhKTyeeYZgPslJ2437+N8XNzq3+7stdsP1XrS7CU94lXL8m7fvnx50FxdNnBBD2q4Z3HIwMhvup84vACt8nRedbvA/9iTx22OHG00rTvNu3jVRe5KHZXbZI6mK1EULS62LJ0N1eDYe+cZ9KdN80EeMiwvJSeSNKipb+JFPdLVoBtDRs3I7FOcNcEN5MSS6vriyquXN8x6xwRF8zkm4Q7g1KL827Nhu1DGwuF9rd2UYL923eMv5ChZmgnyLFZHoj+QvvMo73NfeTilhM8wuUvex0uCmR/oK4cdq3gUPdwxTPsCbWarFwOJr17nTwVeFFKrdudAZwIPVmvJWqCcBP3wWChSG/7gh0MQu+LOWJ80WL8IeM5CAT4cF8toDzsnHrsEoDuXwksB65Lz741ATcE2l8PUFwrMLnRCXEVKfv8Mz/ohGRuOih2fbM19RviuGvpjPc6Z+8nbh3OjFiAbj7vAvWXXV2cbxXpHUnH25RdiFBtkzQx6DJKGg4uRLDXYEBygOlPB4gk+hj3Ld8mKcnWap3WHj6GMibDdh9IbXEwMDDk6magEnPIrfClJM8YlWxd6mDShhxKJH1CQZvpC9KYMghzBt4KM/WtmGZ3fK9Aihtf9oX3W4HY45yAvSGsAMa27b74P8kY=

以下是 MAC 验证错误的原因:

1.if 您的应用程序 运行 在农场(multi-server 环境)

分辨率:

  • 在负载平衡器中启用关联

2.check您的应用程序池使用哪个标识,如果 IIS 工作进程使用应用程序池标识,则可能会导致问题。

分辨率:

  • 使用aspnet_regiis实用工具
  • 创建显式元素

3.Your 应用程序池设置为 LoadUserProfile=false

分辨率:

  • Select应用程序池->进入高级设置->设置LoadUserProfile=true

4.The Page.ViewStateUserKey 属性 的值不正确

分辨率:

  • 验证 ViewStateUserKey 是否设置正确

更详细的解决方法可以参考微软文章: Resolving view state message authentication code (MAC) errors

此致, 贾尔帕