ASP.Netビュー状態MACの検証に失敗

1892 ワード

エラーメッセージ:

ビューステータスMACの検証に失敗しました。このアプリケーションがネットワークフィールドまたはクラスタでベアラされている場合は、<machineKey>構成が同じvalidationKeyおよび検証アルゴリズムを指定していることを確認します。AutoGenerateはクラスタ内では使用できません。


説明:現在のWebリクエストの実行中に未処理の例外が発生しました.スタックトラッキング情報を確認して、このエラーとコードでエラーが発生したソースの詳細を確認してください.異常詳細:System.Web.HttpException:ビュー状態MACの検証に失敗しました.このアプリケーションがネットワークフィールドまたはクラスタでベアラされている場合は、構成が同じvalidationKeyおよび検証アルゴリズムを指定していることを確認します.AutoGenerateはクラスタ内では使用できません.原因:
もしあなたのAspがNetプログラムの実行中にこのエラーが発生しました.「ビューステータスMACの検証に失敗しました.このアプリケーションがネットワークフィールドまたはクラスタによってベアラされている場合は、構成が同じvalidationKeyと検証アルゴリズムを指定していることを確認してください.クラスタ内でAutoGenerateを使用することはできません.」では、アプリケーションに統一されたmachineKeyを使用させなかったことを示します.
 
machineKey用途:
Asp.Netの多くの暗号化は、Forms認証Cookie、View Stateの暗号化など、machineKeyの値に依存しています.デフォルトではAsp.Netの構成は自分で動的に生成するものであり、1台のサーバであればもちろん問題ないが、複数のサーバが負荷等化している場合、machineKeyはまた動的に生成する方式を採用しており、1台のサーバの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