如何在AWS EC2中同步机器密钥?

时间:2012-10-05 19:19:29

标签: amazon-ec2 formsauthentication machinekey autoscaling

由于Auto-Scaling不允许缓冲时间和/或不够智能,不允许只有“新请求”进入由于自动缩减而被安排关闭的实例,我试图避免使用ELB提供的粘性会话。否则,此行为将使一些客户具有登录屏幕。

网站和其他RESTful网络服务正在IIS7中运行。该网站使用基于经典表单的身份验证(MVC3中的内置成员资格提供程序),但很快将迁移到自定义成员资格提供程序以查看cookie并解密然后给出判决。 RESTful Web服务已经在使用自定义成员资格提供程序。

在这种情况下,我认为对于我不能通过其ELB使用粘性会话而无法获得的网站。

RESTful Web服务的ELB可以配置为非粘性,因为它们在每个请求上单独观察cookie,以查看auth令牌是否存在某些加密值。但是,这里的问题是方法FormsAuthentication.Enrypt和FormsAuthentication.Decrypt,它们使用MachineKeys。对 ?!如果没有,那么它没有问题,但如果他们这样做,那么如何在EC2中的自动标量实例之间同步机器密钥?

2 个答案:

答案 0 :(得分:5)

最佳做法是生成计算机密钥并放入web.config文件。这样,当自动缩放开始和停止实例时,密钥将始终保持不变,而不依赖于实际实例。

答案 1 :(得分:0)

由于推荐的网站似乎已被黑客攻击(http://aspnetresources.com/tools/machineKey),我建议您改用以下程序:

  1. 打开IIS管理器
  2. 选择您要管理的网站
  3. 在ASP.NET部分中,选择Machine Key(如果您没有看到此部分,请阅读以下内容)
  4. 取消选中Automatically generate at runtimeGenerate unique keys for each application
  5. 点击“操作”菜单中的Generate Keys,然后点击Apply
  6. 打开web.config并将<machineKey>标记复制到网络服务器场中的其他网络服务器,以便它们都使用相同的计算机密钥
  7. 另外,您没有任何网站记录您的IP地址和生成的机器密钥(如果我们是愤世嫉俗的话)。

    如果您在IIS管理器中没有ASP.NET部分,则可以使用以下过程启用它(来自https://serverfault.com/questions/129714/asp-net-area-in-iis-7-on-windows-2008):

    Windows 7 中,您可以从控制面板启用ASP.NET - &gt;程序 - &gt;程序和功能 - &gt;打开或关闭Windows功能。 展开Internet信息服务 - &gt;万维网服务 - &gt;应用程序开发功能,然后单击ASP.NET。

    Windows Server 2008 中,打开服务器管理器 - &gt;点击角色 - &gt;点击添加角色 - &gt;选择Web服务器(IIS) - &gt;在角色服务中单击ASP.NET,它将提示必要的相关角色服务,单击“添加必需的角色服务”。