有没有办法在不在 web.config 中指定的情况下为 Azure 网站指定机器密钥?

Is there a way to specify a machine key for Azure Websites without specifying it in the web.config?

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

在您的 web.config 中引用机器密钥部分的外部配置文件:

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

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

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

使用 ftp 而不是网络部署将 mkey.config 文件上传到 Azure 网站。

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

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

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

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

使用置顶设置。这些是您为网站设置的应用程序设置,但您将它们配置为保留在它们所在的网站上,这意味着当您交换网站时,您也会交换设置。您可以使用以下 powershell 命令使应用设置具有粘性。

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

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