如果我使用Azure网站的自动缩放功能,我是否需要设置特定的机器密钥?

Ara*_*and 2 azure machinekey azure-web-sites

如果您使用Azure网站自动缩放,是否需要设置计算机密钥,以便加密的身份验证令牌可以在计算机之间共享?

这里有一个问题似乎与 我要问的问题相同.但是,该问题涉及Azure Web角色.我问的是Azure网站.

ahm*_*yed 8

不,你不需要.Azure网站将在2(或10)个不同的VM上运行时为所有实例设置相同的计算机密钥.

如果你想要一个快速而又脏的方法来验证这一点,那么在你的代码中使用以下代码就可以Application_Start()将机器密钥写入一个名为%WEBSITE_INSTANCE_ID%this 的文件,这是每个实例的唯一环境变量.扩展到2台机器,打开Always On设置,在一分钟内,应该在您的D:\home\site\wwwroot文件夹中写入2个文件,这些文件具有名称的长guid(2台机器的实例ID),并且它们将包含相同的密钥.

代码信用就是这个

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());
}
Run Code Online (Sandbox Code Playgroud)