ASPNET核心:在Azure中访问具有秘密的应用程序设置

时间:2016-09-21 23:45:51

标签: azure azure-web-sites

我有一个ASPNET核心站点,在我的开发机器上运行时,利用新的本地机密管理器为少数初始用户存储密码。我通过IConfigurationRoot.GetSection访问秘密商店("用户名")。

以下是如何在Startup.cs中构建IConfigurationRoot:

    var builder = new ConfigurationBuilder()
        .SetBasePath(env.ContentRootPath)
        .AddJsonFile("appsettings.json", optional: true, reloadOnChange: true)
        .AddJsonFile($"appsettings.{env.EnvironmentName}.json", optional: true);

    if (env.IsDevelopment())
    {
        // For more details on using the user secret store see http://go.microsoft.com/fwlink/?LinkID=532709
        builder.AddUserSecrets();
    }

    builder.AddEnvironmentVariables();
    Configuration = builder.Build();

最后一行是IConfigurationRoot属性。

这在开发中非常有用。不幸的是,当我将网站发布到Azure时,密码未被发现。 Azure不支持秘密存储,但您可以设置环境变量。我从我读到的内容中想到,如果您使用相同的密钥,则在配置代码尝试解析配置信息请求时会找到它们。不幸的是,这不起作用,所以我显然遗漏了一些东西。

以下是我如何在Azure中配置密钥:

env vars

这些密钥与我用于成功访问开发计算机上的秘密的密钥相同。

那么我做错了什么?

1 个答案:

答案 0 :(得分:3)

据我所知,Secret Manager工具可以帮助您保密源代码。正如tutorial提到的那样:

  

Secret Manager工具不会对存储的机密进行加密,也不应将其视为受信任存储。它仅用于开发目的。键和值存储在用户配置文件目录中的JSON配置文件中。

同时,我们可以发现秘密存储在用户配置文件目录中的JSON文件中。对于Windows,它将存储在路径中,如下所示:

%APPDATA%\microsoft\UserSecrets\<userSecretsId>\secrets.json

  

不幸的是,当我将网站发布到Azure时,找不到密码。

我按照这个tutorial通过用户秘密将我的敏感数据存储在ASP.NET Core项目中,并发现它可以很好地支持我。将应用程序发布到Azure时,您可以利用Azure App Services应用程序设置覆盖在开发中使用Secret Manager工具存储的敏感值。这是一个供您理解的示例。

假设secrets.json文件的结构存储您的敏感值,如下所示:

{
  "AppKeys": {
    "mark": "ABCDEF",
    "connel": "abcdef"
  }
}

然后,您可以按如下方式在Azure Web App中配置应用程序设置:

为了更好地理解这个想法,您可以关注User Secrets – Storing sensitive data in ASP.NET Core projectsWorking with Azure App Services Application Settings and Connection Strings in ASP.NET Core