【问题标题】:Is there a way to specify a machine key for Azure Websites without specifying it in the web.config?有没有办法为 Azure 网站指定机器密钥而不在 web.config 中指定它?
【发布时间】:2019-03-25 16:09:41
【问题描述】:

我想为我在 Azure 上运行的网站指定一个自定义机器密钥,这样我就可以在暂存和生产之间进行交换,并保持两者之间的环境一致,而不会在我进行交换时“注销”用户(因为否则机器密钥更改并且用户的 cookie 无法再解密)。我以前一直在 web.config 文件中设置它,但我真的不喜欢将这个值存储在源代码管理中(我不断地将更改部署到服务器)。可以在 Azure 门户中指定连接字符串以避免此问题。机器键有解决方案吗?

【问题讨论】:

  • 澄清:您的意思是当您交换 prod 和 stage 并且用户在访问旧 prod 时获得密钥 A 时,当您进行交换时,您希望用户在点击时继续获得密钥 A新产品?
  • Zain - 基本上我希望生产槽保持与交换之前相同的机器密钥。所以登录用户的cookies仍然可以成功解密。在没有明确指定机器密钥的情况下,暂存槽的机器密钥会转移到生产槽,反之亦然,并且已登录的用户将被“注销”,因为他们的 cookie 无法解密。这个问题的更多细节在这里(别人的问题):stackoverflow.com/a/21062386/346291

标签: azure azure-web-app-service


【解决方案1】:

在您的 web.config 中引用 machinekey 部分的外部配置文件:

  <system.web >
    <machineKey configSource="mkey.config"/>
  </system.web>

像这样创建一个文件 mkey.config:

<machineKey 
 validationKey="32E35872597989D14CC1D5D9F5B1E94238D0EE32CF10AA2D2059533DF6035F4F"
 decryptionKey="B179091DBB2389B996A526DE8BCD7ACFDBCAB04EF1D085481C61496F693DF5F4" />

使用 ftp 而不是 web deploy 将 mkey.config 文件上传到 Azure 网站。

【讨论】:

  • 好的,这听起来是一个可行的选择。不是 100% 理想,但它会解决我试图解决的问题,所以我现在就这样做。谢谢法布里齐奥。
  • 请注意,这消除了在部署之前清除 Web 应用程序的可能性。 (这是让每次部署都从头开始的好方法。)
  • @MEMark 你能定义“清除网络应用程序”吗?维护自己的 MachineKey 是否有不利的不利影响?
【解决方案2】:

我不能 100% 确定我正确理解了你的问题,所以我会回答两种可能的解释。

解释 #1: 在您交换 prod 和 stage 之前,您的用户在访问(旧)prod 时获得了密钥 A。当您进行交换时,您希望用户在使用新产品时继续获得密钥 A。

使用应用设置。您可以使用 Portal 或 Powershell 设置它们。这些是您可以设置的键值字符串,它们可以作为环境变量从您的站点访问。当您交换 prod 和 stage 插槽时,旧 prod 上的应用设置都会全部移至新 prod,因此您的客户将看到相同的值。

解释 #2: 在您交换 prod 和 stage 之前,您的用户在访问(旧)prod 时获得密钥 A,在访问旧 staging 插槽时获得密钥 B。当您进行交换时,您希望用户在点击新产品时获得密钥 B,并在访问新的暂存槽时获得密钥 A

使用粘性设置。这些是您为站点设置的应用程序设置,但您将它们配置为与它们所在的站点保持一致,这意味着当您交换站点时,您也会交换设置。您可以使用以下 powershell 命令将应用设置设为粘性。

Set-AzureWebsite -Name mysite -SlotStickyAppSettingNames @("myslot", "myslot2")

此链接中的完整详细信息:http://blog.amitapple.com/post/2014/11/azure-websites-slots/#.VMftXHl0waU

【讨论】:

  • 感谢您的回复 Zain。但是,鉴于机器密钥不是应用程序设置 - 它位于 web.config 的 system.web 部分下,我假设 SlotStickyAppSettingNames 在这里不起作用。我知道您是 Azure 网站团队的一员 - 如果可以使用 Azure 门户进行设置,就像您可以对应用程序设置和连接字符串进行设置一样:)。
猜你喜欢
  • 1970-01-01
  • 2016-04-18
  • 1970-01-01
  • 2014-11-14
  • 1970-01-01
  • 1970-01-01
  • 2021-12-22
  • 2021-09-21
  • 1970-01-01
相关资源
最近更新 更多