Visual Basic .NET を使用してフォーム認証用のキーを作成する方法

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

この資料では、次の 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)

プロジェクトの作成

  1. Microsoft Visual Studio .NET を起動します。
  2. [ファイル] メニューの [新規作成] をポイントし、[プロジェクト] をクリックします。
  3. [プロジェクトの種類] の [Visual Basic プロジェクト] をクリックします。
  4. [テンプレート] の [コンソール アプリケーション] をクリックします。
  5. [名前] ボックスに HashConfigVb と入力し、[OK] をクリックします。

パスワードをハッシュするコードの作成

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

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

  1. KeyCreator という名前の新しいクラス ファイルを Visual Basic プロジェクトに追加します。
  2. KeyCreator.vb ファイルの既存のコードを、次のコードで置き換えます。
    Imports SystemImports System.TextImports System.Security.CryptographyNamespace Crypto  Public Class KeyCreator	    Public Shared Sub CreateMachineKey()      Dim commandLineArgs As String()      commandLineArgs = System.Environment.GetCommandLineArgs()      Dim decryptionKey As String      decryptionKey = CreateKey(System.Convert.ToInt32(commandLineArgs(1)))      Dim validationKey As String      validationKey = CreateKey(System.Convert.ToInt32(commandLineArgs(2)))      Console.WriteLine("<machineKey validationKey=""{0}"" decryptionKey=""{1}"" validation=""SHA1""/>", _      validationKey, decryptionKey)     End Sub     Public Shared Function CreateKey(numBytes As Integer) As String       Dim rng As RNGCryptoServiceProvider = New RNGCryptoServiceProvider()       Dim buff(numBytes -1) As Byte       rng.GetBytes(buff)				       Return BytesToHexString(buff)     End Function      Public Shared Function BytesToHexString(bytes As Byte()) As String       Dim hexString As StringBuilder = New StringBuilder(64)       Dim counter as Integer       For counter = 0 To bytes.Length - 1         hexString.Append(String.Format("{0:X2}", bytes(counter)))       Next       Return hexString.ToString()    End Function  End ClassEnd Namespace					
  3. デフォルトで作成される Module1.vb ファイルを開き、Main サブルーチンに以下のコードを追加します。
        Dim MyKeyCreator As New Crypto.KeyCreator()    MyKeyCreator.CreateMachineKey()					
  4. アプリケーションをビルドします。

ハッシュの生成

コマンド プロンプトからアプリケーションを実行し、暗号解除キーと検証キーのサイズを示す 2 つの整数値を渡します。コンソール アプリケーションに HashConfigVb.exe という名前を付けた場合、アプリケーションの Bin ディレクトリのコマンド プロンプトから以下の構文を入力します。
HashConfigVb.exe 24 64
アプリケーションが以下のような出力を返します。
<machineKey validationKey="08CE6B478DCE73..........E566D8AC5D1C045BA60"            decryptionKey="4252D6B2268.........67F451CE65D0F2ABE9BCD3A"            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 ファーム全体で使用可能にする場合
関連情報
関連情報を参照するには、以下の「サポート技術情報」 (Microsoft Knowledge Base) をクリックしてください。
308157 [HOW TO] Visual Basic .NET を使って ASP.NET アプリケーションでフォームベースの認証を実装する方法
306238 [HOW TO] Visual Basic .NET を使用して、ASP.NET アプリケーションでフォーム ベースの認証にロール ベースのセキュリティを実装する方法
306590 [INFO] ASP.NET のセキュリティについて
307626 [INFO] ASP.NET の構成の概要
関連情報
この資料は米国 Microsoft Corporation から提供されている Knowledge Base の Article ID 313091 (最終更新日 2004-07-15) を基に作成したものです。

この資料に含まれているサンプル コード/プログラムは英語版を前提に書かれたものをありのままに記述しており、日本語環境での動作は確認されておりません。
webfarm view state
プロパティ

文書番号:313091 - 最終更新日: 10/29/2007 14:53:07 - リビジョン: 3.9

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

  • kbproductlink kbconfig kbhowtomaster kbsecurity kbstate KB313091
フィードバック