Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/azure/12.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
有没有一种方法可以在不在web.config中指定机器密钥的情况下为Azure网站指定机器密钥?_Azure_Azure Web App Service - Fatal编程技术网

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

有没有一种方法可以在不在web.config中指定机器密钥的情况下为Azure网站指定机器密钥?,azure,azure-web-app-service,Azure,Azure Web App Service,我想为我在Azure上运行的网站指定一个自定义机器密钥,这样我就可以在登台和生产之间进行交换,并保持这两个站点之间的环境一致性,而无需在交换时让用户“注销”(因为否则机器密钥会更改,用户的cookie将无法再解密)。我以前在web.config文件中设置过这个值,但我不喜欢将这个值存储在源代码管理中(我一直在将更改部署到服务器)。可以在Azure门户中指定连接字符串以避免此问题。是否有机器密钥的解决方案?在web.config中,请参考machinekey部分的外部配置文件: <sys

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

在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%确定我是否正确理解您的问题,因此我将回答这两种可能的解释

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

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

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

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

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

此链接中的完整详细信息:

澄清:您的意思是,当您交换产品和阶段时,用户在访问旧产品时获得了密钥A,在进行交换时,您希望用户在点击新产品时继续获得密钥A?Zain-基本上,我希望生产槽保持与交换前相同的机器密钥。因此,登录用户的cookie仍然可以成功解密。如果不明确指定机器密钥,暂存槽的机器密钥将传输到生产槽,反之亦然,并且登录的用户将“注销”,因为他们的cookie无法解密。关于这个问题的更多细节(其他人的问题):谢谢你的回复Zain。但是,鉴于机器密钥不是应用程序设置,而是在web.config的system.web部分下,我假设SlotStickyAppSettingNames在这里不起作用。我知道你是Azure网站团队的成员-如果可以使用Azure门户设置,就像你可以设置应用程序设置和连接字符串一样,那就太好了:)。好的,这听起来是一个可行的选择。虽然不是100%理想,但它可以解决我试图解决的问题,所以我现在就这么做。谢谢Fabrizio。请不要担心这会消除在部署之前清除web应用程序的可能性。(这是一个很好的方法,可以让每次部署都有一个干净的开始。)@MEMark你能定义“清除web应用程序”吗?维护自己的机器是否存在不利的不利因素?