在Azure网站中设置ASP.Net 5身份验证AppId和AppSecret配置

时间:2015-05-25 12:26:35

标签: azure-web-sites

由于在我的Azure网站部署中缺少AppId和AppSecret,我收到错误500.

如何在服务器上进行此设置?复制project.json文件似乎不够。

在开发机器上,AppId和AppSecret值为added to configuration through SecretManager

更新:我现在已经在代码中硬编码了AppId和AppSecret值,就像它在以前版本中完成的那样,当然这仍然有效。最后,出于明显的安全原因,我仍然希望能够使用SecretManager(或类似的东西)在服务器上设置配置值。

2 个答案:

答案 0 :(得分:2)

Azure Web Apps(网站)中的秘密存储为应用程序设置(和连接字符串)。 在您的代码中,您应该使用System.Configuration.ConfigurationManager.AppSettings来访问它们。

您需要在web.config文件中指定本地/调试设置。

<appSettings>
    <add key="AppId" value="appid" />
</appSetting>

实际的机密信息在Azure管理门户中配置为APP SETTINGS

答案 1 :(得分:1)

这也令我感到不安。文件不清楚。但是,当我试图找出与连接字符串相同的问题时,我发现了解决方案:

https://stackoverflow.com/a/31341718/567524

(您可以使用那里的代码从Azure网站显示您的配置设置并对其进行调试,这就是我想出来的。)

基本上,MVC 6不再使用web.config,因此Azure不能以相同的方式工作。相反,Azure App Settings可通过Environment Variables:

获得
// Get the environment variables (which is how we will access Azure App Settings)
configuration.AddEnvironmentVariables()

现在,Azure中的环境变量将映射到特定键。例如,Azure连接字符串设置变为:

// The Azure Connection string called "NAME" will be accessible here in MVC 6
Data:NAME:ConnectionString

这很好,因为默认的MVC 6模板使用相同的模式Data:NAME:ConnectionString。

此外,对于我们的应用设置,如果我们使用“:”分隔符,则环境变量会映射到预期的位置。

名为“身份验证:Facebook:AppId”的Azure应用设置将覆盖config.json值:

"Authentication": {
    "Facebook": {
        "AppId": "123MyId",...

关键是所有这些都是通过环境变量从Azure传递到MVC 6。 (这就是为什么AddEnvironmentVariables()是配置上的最后一次调用,以确保它优先于其他值。)