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

文書翻訳 文書翻訳
文書番号: 313091 - 対象製品
この記事は、以前は次の ID で公開されていました: JP313091
すべて展開する | すべて折りたたむ

目次

概要

この資料では、フォーム認証 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 System
    Imports System.Text
    Imports System.Security.Cryptography
    Namespace 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 Class
    End 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) を基に作成したものです。

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

プロパティ

文書番号: 313091 - 最終更新日: 2007年10月29日 - リビジョン: 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
"Microsoft Knowledge Baseに含まれている情報は、いかなる保証もない現状ベースで提供されるものです。Microsoft Corporation及びその関連会社は、市場性および特定の目的への適合性を含めて、明示的にも黙示的にも、一切の保証をいたしません。さらに、Microsoft Corporation及びその関連会社は、本文書に含まれている情報の使用及び使用結果につき、正確性、真実性等、いかなる表明・保証も行ないません。Microsoft Corporation、その関連会社及びこれらの権限ある代理人による口頭または書面による一切の情報提供またはアドバイスは、保証を意味するものではなく、かつ上記免責条項の範囲を狭めるものではありません。Microsoft Corporation、その関連会社 及びこれらの者の供給者は、直接的、間接的、偶発的、結果的損害、逸失利益、懲罰的損害、または特別損害を含む全ての損害に対して、状況のいかんを問わず一切責任を負いません。(Microsoft Corporation、その関連会社 またはこれらの者の供給者がかかる損害の発生可能性を了知している場合を含みます。) 結果的損害または偶発的損害に対する責任の免除または制限を認めていない地域においては、上記制限が適用されない場合があります。なお、本文書においては、文書の体裁上の都合により製品名の表記において商標登録表示、その他の商標表示を省略している場合がありますので、予めご了解ください。"

フィードバック

 

Contact us for more help

Contact us for more help
Connect with Answer Desk for expert help.
Get more support from smallbusiness.support.microsoft.com