ASP.NET machineKeyの役割と使い方

3145 ワード

ASP.NET machineKeyの役割
もしあなたのAspがNetプログラムの実行中にこのエラーが発生しました.「ビューステータスMACの検証に失敗しました.このアプリケーションがネットワークフィールドまたはクラスタによってベアラされている場合は、構成が同じvalidationKeyと検証アルゴリズムを指定していることを確認してください.クラスタ内でAutoGenerateを使用することはできません.」では、アプリケーションに統一されたmachineKeyを使用させなかったことを説明します.machineKeyの役割は何ですか.MSDNの基準に従って、「鍵を構成し、Forms認証Cookieデータとビューステータスデータの暗号化と復号化に使用し、プロセス外セッションステータスIDの検証に使用します.」つまりAsp.Netの多くの暗号化は、Forms認証Cookie、View Stateの暗号化など、machineKeyの値に依存しています.デフォルトではAsp.Netの構成は自分で動的に生成するものであり、1台のサーバであればもちろん問題ないが、複数台のサーバの負荷が均等であれば、machineKeyは動的に生成する方式を採用しており、各サーバのmachinekey値が一致しないと暗号化された結果も一致せず、検証とViewStateを共有できないため、複数台のサーバの負荷が均等である場合、必ず各サイトに同じmachineKeyを配置してください.
ASP.NET machineKeyが生成するアルゴリズム:

 
  1. validationKey = CreateKey(20);  
  2.  
  3. decryptionKey = CreateKey(24);  
  4.  
  5.       protected string CreateKey(int len)  
  6.  
  7.       {  
  8.  
  9.              byte[] bytes = new byte[len];  
  10.  
  11.              new RNGCryptoServiceProvider().GetBytes(bytes);  
  12.  
  13.                StringBuilder sb = new StringBuilder();  
  14.  
  15.                for(int i = 0; i < bytes.Length; i++)  
  16.  
  17.                {      
  18.  
  19.                     sb.Append(string.Format("{0:X2}",bytes[i]));  
  20.  
  21.                }  
  22.  
  23.                return sb.ToString();  
  24.  
  25.       }  
ASP.NET machineKey :

   <?xml version="1.0"?> 
     
   <configuration> 
    
       <system.web> 
             <machineKey validationKey="3FF1E929BC0534950B0920A7B59FA698BD02DFE8" decryptionKey="280450BB36319B474C996B506A95AEDF9B51211B1D2B7A77" decryption="3DES" validation="SHA1"/> 
       </system.web> 

</configuration>
:http://developer.51cto.com/art/200908/145676.htm