【问题标题】:How to synchronize machine keys in AWS EC2?如何在 AWS EC2 中同步机器密钥?
【发布时间】:2012-09-26 23:47:45
【问题描述】:

由于 Auto-Scaling 不允许缓冲期和/或不够智能,不允许仅“新请求”进入因自动缩减而计划关闭的实例,因此我正在尝试避免使用 ELB 提供的粘性会话。否则,此行为会使一些客户留下登录屏幕。

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

在这种情况下,我认为对于该网站,如果不通过其 ELB 使用粘性会话,我将无法正常工作。

可以将 RESTful Web 服务的 ELB 配置为非粘性,因为它们会在每个请求上单独观察 cookie,以查看身份验证令牌是否存在并带有一些加密值。但是,这里的问题是 FormsAuthentication.Enrypt 和 FormsAuthentication.Decrypt 方法,它们在后台使用 MachineKeys。正确的 ?!如果没有,那么它没有问题,但如果他们这样做了,那么如何在 EC2 中跨自动缩放的实例同步机器密钥?

【问题讨论】:

    标签: amazon-ec2 formsauthentication machinekey autoscaling


    【解决方案1】:

    对此的最佳做法是生成一个机器密钥并将其放入您的 web.config 文件中。这样,当 Auto Scaling 启动和停止实例时,键将始终保持不变,而不依赖于实际实例。

    【讨论】:

    • 这看起来很有希望。我会尝试一下,然后标记你的答案。所以基本上你是说我可以通过 webconfig 为 web 服务配置机器密钥,然后 FormsAuthentication.Encrypt 和 FormsAuthentication.Decrypt 将使用这些机器密钥,而不是实例附带的机器密钥。对吧?
    【解决方案2】:

    由于推荐的网站似乎已被黑客入侵 (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> 标签复制到您网络场中的其他网络服务器,以便它们都使用相同的机器密钥

    另外,您不会有任何网站记录您的 IP 地址和生成的机器密钥(如果我们是愤世嫉俗的话)。


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

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

    Windows Server 2008 中,打开服务器管理器 -> 点击角色 -> 点击添加角色 -> 选择 Web 服务器 (IIS) -> 在角色服务中点击 ASP.NET 它会提示必要的依赖角色服务单击添加所需角色服务。

    【讨论】:

      猜你喜欢
      • 2022-01-04
      • 2018-01-02
      • 1970-01-01
      • 2023-03-28
      • 2016-08-26
      • 1970-01-01
      • 2021-03-09
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多