ASPNET Core:访问Azure中处于机密状态的应用程序设置

ASPNET Core:访问Azure中处于机密状态的应用程序设置,azure,azure-web-app-service,Azure,Azure Web App Service,我有一个ASPNET核心站点,在我的开发机器上运行时,它利用新的本地机密管理器为一些初始用户存储密码。我通过IConfigurationRoot.GetSection(“用户名”)访问机密存储 以下是如何在Startup.cs中构建IConfigurationRoot: var builder = new ConfigurationBuilder() .SetBasePath(env.ContentRootPath) .AddJsonFile("appse

我有一个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中配置密钥的方式:

这些密钥与我用来成功访问我的开发机器上隐藏的秘密的密钥相同


那么我做错了什么呢?

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

机密管理器工具不加密存储的机密,不应将其视为受信任的存储。它仅用于发展目的。键和值存储在用户配置文件目录中的JSON配置文件中

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

%APPDATA%\microsoft\UserSecrets\\secrets.json

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

我遵循这一点,通过用户机密将敏感数据存储在ASP.NET核心项目中,并发现它在我这方面可以很好地工作。将应用程序发布到Azure时,您可以利用Azure app Services应用程序设置覆盖开发中使用Secret Manager工具存储的敏感值。这里有一个示例供您理解

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

{
  "AppKeys": {
    "mark": "ABCDEF",
    "connel": "abcdef"
  }
}
然后,您可以在Azure Web应用程序中配置应用程序设置,如下所示:

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


为了更好地理解这个想法,您可以遵循和。

Hey Mark,您使用工具/命令行设置的secret
key,value
对,您在
appSettings.json
中有吗?如果
yes
,那么并且只有这样它才能被Azure的
覆盖。希望这是有道理的。基本上
Appsettings.json
secrets.json
结构应该是相同的,以便在应用程序中使用它们。Thanx,JS,但我认为这不对。至少,我似乎记得读过一些东西,上面说Azure的东西可能在某种环境变量中。加上,我不想在appSettings.json中放置机密凭据——Azure环境变量应该永远不会公开可见。哦,不,我知道你不想在appSettings.json中使用值-我的意思是你需要在appSettings中使用
虚拟值的结构在Azure上识别和替换-至少这是我们使其工作的方式。我试图回答Azure应用程序设置的第二部分未被读取。所以在我们的例子中:我们将指向localDb的连接字符串替换为AzurePortal上指向AzureSQLThanx的连接字符串,Bruce,我将对此进行研究。FWIW,这是我目前遵循的方法,除了密钥——Connell和Mark——在开发机器的秘密存储和Azure应用程序设置中都是根级别的。但是有另一个链接可以跟随是很好的。