Если я использую функции автоматического масштабирования веб-сайтов Azure, нужно ли указывать определенный ключ компьютера?

Если вы используете автоматическое масштабирование с веб-сайтами Azure, нужно ли устанавливать ключ компьютера, чтобы зашифрованные токены аутентификации могли совместно использоваться компьютерами?

Здесь есть вопрос, который кажется таким же, как тот, который я задаю. Однако этот вопрос относится к веб-ролям Azure. Я спрашиваю о веб-сайтах Azure.

1 ответ

Решение

Нет, тебе не нужно. Веб-сайт Azure установит один и тот же ключ компьютера для всех ваших экземпляров, когда они работают на 2 (или 10) разных виртуальных машинах.

Если вы хотите быстрый и грязный способ проверить это, используйте следующий фрагмент кода в вашем Application_Start() в основном это записывает машинный ключ в файл с именем %WEBSITE_INSTANCE_ID% это уникальная переменная среды для каждого экземпляра. Масштаб до 2 машин, включите 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());
}
Другие вопросы по тегам