Ara*_*and 2 azure machinekey azure-web-sites
如果您使用Azure网站自动缩放,是否需要设置计算机密钥,以便加密的身份验证令牌可以在计算机之间共享?
这里有一个问题似乎与 我要问的问题相同.但是,该问题涉及Azure Web角色.我问的是Azure网站.
不,你不需要.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)
| 归档时间: |
|
| 查看次数: |
917 次 |
| 最近记录: |