8

IIS でホストされている ASP.NET MVC 4 Web サイトのために、実行時にコードでマシン キーを動的に調整したいと考えています。

マシン キー、暗号化キー、検証キー、および使用するアルゴリズムは、データベースに格納されます。ファイルから値を読み取る代わりに、web.configアプリケーションの起動時にそれらの値を挿入し、代わりにシステムにそれらの値を使用させたいと考えています。

まったく変更せずにそれを達成する方法はありますかweb.config(インメモリ構成のみを変更するため)?

構成セクションにアクセスしようとしましたが、読み取り専用としてマークされており、封印されているため、オーバーライドできませんIsReadOnly()。ただし、setter読み取り専用フラグを潜在的に削除する方法がある可能性があることを示す指標があります。

var configSection = (MachineKeySection)ConfigurationManager.GetSection("system.web/machineKey");
if (!configSection.IsReadOnly())
{
       configSection.ValidationKey = _platformInfo.MachineKey.ValidationKey;
       configSection.DecryptionKey = _platformInfo.MachineKey.EncryptionKey;
       ...
}

これを達成する方法はありますか?私が見ることができる唯一の代替手段は、AppHarbor のようなカスタム メソッドを使用することですが、可能であれば、組み込みのアプローチに固執したいと思います。

なぜそれをしたいのか誰かが尋ねた場合、その理由は、これは Web ファームで実行されている多数の同一の Web サイトのためです。したがって、自動生成されていないキーを持つことは必須です (各サーバーで同じでなければなりません)。また、各 Web サイトを分離し、同じキーを共有しないようにする必要があります。すべての Web サイトは物理的な表現が同じであるため、同じ物理的な場所を共有しています。これが、web.config ファイルにアプリケーション固有の設定を含めることができない理由です。

編集:少なくともそれが不可能な場合は、確認することは非常に役立ちます. 前述のように、マシン キー設定の使用を完全に回避するカスタム認証および暗号化方法を使用できます。ありがとう。

4

3 に答える 3

5

Web アプリケーションの起動後にプログラムでこれを設定する方法はありません。ただし、目標を達成することはまだ可能です。

各アプリケーションが独自のアプリケーション プールで実行されており、各アプリケーション プールに独自の ID がある場合は、applicationHost.configのCLRConfigFileスイッチを確認してください。このアプリケーションごとのプールを使用して、新しいレベルの構成を挿入できます。これを使用する方法の例については、http://weblogs.asp.net/owscott/archive/2011/12/01/setting-an-aspnet-config-file-per-application-pool.aspxを参照してください。各アプリケーション プールのカスタム CLR 構成ファイルで、明示的かつ一意の <system.web/machineKey> 要素を設定できます。

これは、アプリケーションごとに既定の明示的なマシン キーを設定する必要がある Azure Web サイト、GoDaddy、およびその他のホスティング事業者が使用するメカニズムと同じです。アクセスするアプリケーション プールに対して、各ターゲット .config ファイルを適切に ACL することを忘れないでください。

于 2013-08-28T03:29:13.360 に答える