Azure Web サイトで自動スケーリングを使用する場合、暗号化された認証トークンをマシン間で共有できるようにマシン キーを設定する必要がありますか?
ここに 、私が尋ねているものと同じように見える質問があります。ただし、その質問は Azure Web ロールに関するものです。Azure Web サイトについてお尋ねします。
Azure Web サイトで自動スケーリングを使用する場合、暗号化された認証トークンをマシン間で共有できるようにマシン キーを設定する必要がありますか?
ここに 、私が尋ねているものと同じように見える質問があります。ただし、その質問は Azure Web ロールに関するものです。Azure Web サイトについてお尋ねします。
いいえ、必要ありません。Azure Website は、2 つ (または 10) の異なる VM で実行されているすべてのインスタンスに同じマシン キーを設定します。
これを確認する手っ取り早い方法が必要な場合は、基本的にこれは、インスタンスごとに一意の環境変数であるApplication_Start()
というファイルにマシン キーを書き込みます。%WEBSITE_INSTANCE_ID%
2 台のマシンにスケールし、設定をオンにすると、1 分以内に名前の長い GUID (2 台のマシンのインスタンス ID) を持つAlways On
2 つのファイルがフォルダーに書き込まれ、同じキーが含まれます。D:\home\site\wwwroot
protected void Application_Start()
{
var section = (MachineKeySection)
ConfigurationManager.GetSection("system.web/machineKey");
BindingFlags flags =
BindingFlags.Instance |
BindingFlags.NonPublic |
BindingFlags.GetProperty;
Func<string, byte[]> propertyReader = name => (byte[])section
.GetType()
.GetProperty(name, flags)
.GetValue(section, null);
using (
var writer =
new StreamWriter(Environment.ExpandEnvironmentVariables(@"%HOME%\site\wwwroot\%WEBSITE_INSTANCE_ID%.log")))
{
var key = ConvertToHex(
propertyReader("DecryptionKeyInternal"));
writer.WriteLine("DecryptKey: {0}", key);
var iv = ConvertToHex(
propertyReader("ValidationKeyInternal"));
writer.WriteLine("ValidationKey: {0}", iv);
}
}
private string ConvertToHex(byte[] binary)
{
return binary.Aggregate(
new StringBuilder(),
(acc, c) => acc.AppendFormat("{0:x2}", c),
acc => acc.ToString());
}