IISホストASP.NET MVC 4ウェブサイトの実行時にコード内でコードを動的に調整したい。ASP.NETマシンキーセットコード
使用するマシンキー、暗号化キー、検証キー、およびアルゴリズムは、データベースに格納されます。 web.config
ファイルから値を読み取るのではなく、アプリケーションの起動時にこれらの値を注入し、代わりにそれらの値を使用させたいと思います。
web.config
を変更しなくても実現できる方法はありますか(メモリ構成を変更するだけです)。
設定セクションにアクセスしようとしましたが、読み取り専用とマークされており、封印されているため、IsReadOnly()
を上書きすることはできません。しかし、があります。私には、readonlyフラグを削除する方法があるかもしれません。
var configSection = (MachineKeySection)ConfigurationManager.GetSection("system.web/machineKey");
if (!configSection.IsReadOnly())
{
configSection.ValidationKey = _platformInfo.MachineKey.ValidationKey;
configSection.DecryptionKey = _platformInfo.MachineKey.EncryptionKey;
...
}
これを達成する方法はありますか? 私が見ることのできる唯一の選択肢は、AppHarborのようなカスタムメソッドを使用することですが、可能であれば組み込みのアプローチに固執します。
誰かがなぜ私がそれをしたいのかと尋ねる場合、理由は、 これはウェブファームで実行されている多数の同一のウェブサイトのためのものです。したがって、非自動生成キーを持つことは必須です(各サーバーで同じである必要があります)。また、各ウェブサイトは隔離されていて、同じキーを共有すべきではありません。すべてのウェブサイトは物理的表現が同一なので、同じ物理的な場所を共有しています。これがweb.configファイルにアプリケーション固有の設定を含めることができない理由です。
編集:少なくとも単純には不可能であるかどうかを確認することは非常に役に立ちます。前述したように、カスタム認証と暗号化方式を使用することで、マシンキー設定を完全に使用することを避けることができます。ありがとう。
おかげで私を助け多く、(とうまくいけば他の人も同様です)。通常、より大きなウェブサイトでは、別々のアプリケーションプールを使用しています。しかし、小規模なサイトは潜在的にアプリケーションプールを共有しています。しかし、私が必要としているのは、その周りに構築できるからです。 – michael81
カスタムCLR設定ファイルの構造を "/configuration/system.web/machineKey"にする必要がありますか?アプリケーションで実際のmachineKey値を表示またはテストして、カスタムCLR設定ファイルが実際に正しく機能したかどうかを確認する方法はありますか? – John
はい。 ConfigurationManager.GetSection( "system.web/machineKey")を使用して、返されたオブジェクトをMachineKeySectionにキャストし、そのプロパティを調べて変更が正しく取得されたことを確認できます。 – Levi