Если я использую функции автоматического масштабирования веб-сайтов 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());
}