• ASP.Net 验证视图状态 MAC 失败


    错误信息

    验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。

    说明: 执行当前 Web 请求期间,出现未处理的异常。请检查堆栈跟踪信息,以了解有关该错误以及代码中导致错误的出处的详细信息。
    异常详细信息: System.Web.HttpException: 验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。
    造成原因

    如果你的Asp.Net程序执行时碰到这种错误:“验证视图状态 MAC 失败。如果此应用程序由网络场或群集承载,请确保 <machineKey> 配置指定了相同的 validationKey 和验证算法。不能在群集中使用 AutoGenerate。”那么说明你没有让你的应用程序使用统一的machineKey。

    machineKey用途

    Asp.Net的很多加密,都是依赖于machineKey里面的值,例如Forms 身份验证 Cookie、ViewState的加密。默认情况下,Asp.Net的配置是自己动态生成,如果单台服务器当然没问题,但是如果多台服务器负载均衡,machineKey还采用动态生成的方式,每台服务器上的machinekey值不一致,就导致加密出来的结果也不一致,不能共享验证和ViewState,所以对于多台服务器负载均衡的情况,一定要在每台站点配置相同的machineKey。

     
        machineKey生成方式:
    
        string Str = String.Format("<machineKey validation="3DES" validationKey="{0}"  decryptionKey="{1}" decryption="3DES"/>",CreateKey(20),CreateKey(24));
    
         protected string CreateKey(int len) 
         { 
                byte[] bytes = new byte[len]; 
                new RNGCryptoServiceProvider().GetBytes(bytes); 
                StringBuilder sb = new StringBuilder(); 
                for(int i = 0; i < bytes.Length; i++) 
                {    
                     sb.Append(string.Format("{0:X2}",bytes[i])); 
                } 
                return sb.ToString(); 
         } 
    

      自动生成工具:http://aspnetresources.com/tools/machineKey

  • 相关阅读:
    创建局域网方案!!!!!--安全的物联网技术方案使用说明与管理
    创建局域网方案!!!!!--交叉编译步骤和使用事项!!
    java学习与应用(1)--基本回顾
    iptables的nat使用记事
    iptables交叉编译记事
    telnet传输文件
    tensorflow零起点快速入门(6) --np与tf
    Sinlinx交叉编译半途记事
    tensorflow零起点快速入门(5) --强化学习摘录截图(tf与np)
    Latex使用记事(1)
  • 原文地址:https://www.cnblogs.com/lyuec/p/3583225.html
Copyright © 2020-2023  润新知