我想为在Azure上运行的网站指定自定义计算机密钥,因此我可以在暂存和生产之间进行切换,并在两者之间保持环境一致,而无需用户退出"每当我进行交换时(因为否则机器密钥会改变,用户的cookie将不再被解密)。我以前一直在web.config文件中设置它,但我不太喜欢将此值存储在源代码控制中(我不断将更改部署到服务器)。可以在Azure门户中指定连接字符串以避免此问题。机密钥有解决方案吗?
答案 0 :(得分:3)
在web.config中引用machinekey部分的外部配置文件:
<system.web >
<machineKey configSource="mkey.config"/>
</system.web>
像这样创建一个mkey.config文件:
<machineKey
validationKey="32E35872597989D14CC1D5D9F5B1E94238D0EE32CF10AA2D2059533DF6035F4F"
decryptionKey="B179091DBB2389B996A526DE8BCD7ACFDBCAB04EF1D085481C61496F693DF5F4" />
使用ftp而不是web deploy将mkey.config文件上传到Azure网站。
答案 1 :(得分:0)
我不是百分百肯定我理解你的问题,所以我会回答两种可能的解释。
解读#1: 在您交换产品和阶段之前,您的用户在访问(旧)产品时获得了密钥A.当您进行交换时,您希望用户在点击新产品时继续获取密钥A.
使用应用设置。您可以使用Portal或Powershell设置它们。这些是您可以设置的键值字符串,它们可以作为您站点的环境变量访问。当您更换prod和stage插槽时,旧产品上的应用程序设置都将移至新产品,因此您的客户将看到相同的值。
解释#2: 在交换prod和stage之前,用户在访问(旧)prod时获得密钥A,在访问旧的临时插槽时获得密钥B.当您进行交换时,您希望用户在访问新prod时获取密钥B,并在访问新的临时插槽时键入A
使用粘性设置。这些是您为网站设置的应用程序设置,但您将它们配置为与它们所在的网站保持一致,这意味着当您交换网站时,您也可以交换设置。您可以使用以下powershell命令使应用设置变粘。
Set-AzureWebsite -Name mysite -SlotStickyAppSettingNames @("myslot", "myslot2")
此链接中的完整详细信息:http://blog.amitapple.com/post/2014/11/azure-websites-slots/#.VMftXHl0waU