現在オフラインです。再接続するためにインターネットの接続を待っています

Visual C# .NET を使用して、フォーム認証に使用するキーを作成する方法

この記事は、以前は次の ID で公開されていました: JP312906
Microsoft Visual Basic .NET については、次の資料を参照してください。313091

この資料では、次の Microsoft .NET Framework クラス ライブラリの名前空間を参照しています。
  • System.Text
  • System.Security.Cryptography
概要
この資料では、フォーム認証の Cookie データの暗号化、解読、および検証に使用するキーの作成方法について説明します。この資料で作成するキーは、Machine.config ファイルおよび Web.config ファイルで <system.web> 要素の <machineKey> セクションの validationKey 属性および decryptionKey 属性に使用できます。

必要条件

次の一覧は、推奨する必要なハードウェア、ソフトウェア、ネットワーク インフラストラクチャ、および Service Pack です。
  • Microsoft Windows 2000 または Microsoft Windows XP
  • Microsoft .NET Framework
  • Microsoft インターネット インフォメーション サービス (IIS)

プロジェクトの作成

以下の手順を実行して、Visual C# .NET のコンソール アプリケーションを作成します。
  1. Visual Studio .NET を起動します。
  2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
  3. [プロジェクトの種類] で [Visual C# プロジェクト] をクリックします。
  4. [テンプレート] の [コンソール アプリケーション] をクリックします。
  5. プロジェクトに HashConfigCs という名前を付けます。
  6. [OK] をクリックします。

キーを生成するコードの記述

以下のコードにより、コマンド ラインから渡される 2 つの引数が読み取られます。
  • 最初の引数は、decryptionKey 属性の作成に使用されるバイト数です。
  • 2 番目の引数は、validationKey 属性の作成に使用されるバイト数です。
コードでは乱数ジェネレータを使用して、コマンド ライン引数に基づいた任意のバイト数が作成されます。作成された任意のバイト数は、.config ファイルで使用するのに適した 16 進数の文字列に変換されます。

: 作成される 16 進数の文字列のサイズは、コマンド ラインで渡される値の 2 倍になります。たとえば、キーに 24 バイトを指定すると、変換後の文字列の長さは 48 バイトになります。decryptionKey の有効な値は 8 または 24 です。これにより、DES (Data Encryption Standard) 用の 16 バイト キー、または Triple DES 用の 48 バイト キーがそれぞれ作成されます。validationKey の有効な値は 20 ~ 64 です。これにより、長さ 40 ~ 128 バイトのキーが作成されます。コードからは、<machineKey> 要素全体が出力されます。この出力を Machine.config ファイルまたは Web.config ファイルにコピーして貼り付けることができます。

.cs ファイルに以下のコードを追加します。
using System;using System.Text;using System.Security.Cryptography;namespace Crypto{    public class KeyCreator    {        public static void Main(String[] args)        {			            String[] commandLineArgs = System.Environment.GetCommandLineArgs();            string decryptionKey = CreateKey(System.Convert.ToInt32(commandLineArgs[1]));            string validationKey = CreateKey(System.Convert.ToInt32(commandLineArgs[2]));            Console.WriteLine("<machineKey validationKey=\"{0}\" decryptionKey=\"{1}\" validation=\"SHA1\"/>", validationKey, decryptionKey);        }	        static String CreateKey(int numBytes)         {            RNGCryptoServiceProvider rng = new RNGCryptoServiceProvider();            byte[] buff = new byte[numBytes];            rng.GetBytes(buff);            return BytesToHexString(buff);        }        static String BytesToHexString(byte[] bytes)         {            StringBuilder hexString = new StringBuilder(64);            for (int counter = 0; counter < bytes.Length; counter++)             {                hexString.Append(String.Format("{0:X2}", bytes[counter]));            }            return hexString.ToString();        }    }}				

ハッシュの生成

これまでの作業により、アプリケーションはコンパイルできる状態になっています。

コマンド プロンプトから、解読キーと検証キーのサイズを示す 2 つの整数値を渡して、アプリケーションを実行します。たとえば、コンソール アプリケーションに HashConfigCs.exe という名前を付けた場合、アプリケーションの Bin\debug ディレクトリでコマンド ラインから以下の構文を入力します。
hashconfigcs.exe 24 64
アプリケーションにより、以下のような出力が返されます。
<machineKey validationKey="21F090935F6E49C2C797F69BBAAD8402ABD2EE0B667A8B44EA7DD4374267A75D7AD972A119482D15A4127461DB1DC347C1A63AE5F1CCFAACFF1B72A7F0A281B"            decryptionKey="261F793EB53B761503AC445E0CA28DA44AA9B3CF06263B77"            validation="SHA1"/>					
: コードで乱数ジェネレータが使用されているので、出力は毎回異なります。

構成ファイルの更新

  1. Machine.config ファイルまたは Web.config ファイルに移動します。
  2. 構成ファイルの <system.web> セクションに移動します。
  3. <machineKey> セクションをコンソール アプリケーションからの出力で置き換えます。<machineKey> セクションが存在しない場合は、作成します。
  4. 構成ファイルを保存します。
  5. Machine.config の変更を適用するには、Web ファームのすべてのサーバーで、IIS を再起動します。

トラブルシューティング

以下の場合には、Web ファーム全体で <machineKey> セクションに、同一の明示的なキーがある (つまり、<machineKey> セクションの属性に AutoGenerate オプションを使用していない) ことを確認してください。
  • フォーム認証を使用する場合
  • StateServer モードでセッションの状態を実行する場合
  • enableViewStateMac 属性がデフォルトで True に設定されているので、ViewState を Web ファーム全体で使用可能にする場合
詳細
以下の場合は、Web ファーム全体で machineKey セクションを同じにする必要があります。
  • フォーム認証を使用する場合
  • StateServer モードでセッションの状態を実行する場合
  • enableViewStateMac 属性がデフォルトで True に設定されているので、ViewState を Web ファーム全体で使用可能にする場合
関連情報
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
301240 [HOW TO] C# .NET を使用して ASP.NET にフォーム ベースの認証を実装する方法
311495 C# .NET を使用して、ASP.NET アプリケーションにフォーム ベースの認証とロール ベースのセキュリティを実装する方法
306590 ASP.NET のセキュリティについて
307626 ASP.NET の構成の概要
プロパティ

文書番号:312906 - 最終更新日: 10/13/2005 06:07:01 - リビジョン: 3.7

Microsoft ASP.NET 1.0, Microsoft Visual C# .NET 2002 Standard Edition, Microsoft ASP.NET 1.1, Microsoft Visual C# .NET 2003 Standard Edition

  • kbconfig kbhowtomaster kbsecurity kbstate KB312906
フィードバック
/html>