2

Azure Web サイトで自動スケーリングを使用する場合、暗号化された認証トークンをマシン間で共有できるようにマシン キーを設定する必要がありますか?

ここに 、私が尋ねているものと同じように見える質問があります。ただし、その質問は Azure Web ロールに関するものです。Azure Web サイトについてお尋ねします。

4

1 に答える 1

8

いいえ、必要ありません。Azure Website は、2 つ (または 10) の異なる VM で実行されているすべてのインスタンスに同じマシン キーを設定します。

これを確認する手っ取り早い方法が必要な場合は、基本的にこれは、インスタンスごとに一意の環境変数であるApplication_Start()というファイルにマシン キーを書き込みます。%WEBSITE_INSTANCE_ID%2 台のマシンにスケールし、設定をオンにすると、1 分以内に名前の長い GUID (2 台のマシンのインスタンス ID) を持つAlways On2 つのファイルがフォルダーに書き込まれ、同じキーが含まれます。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());
}
于 2014-04-24T01:24:55.287 に答える