我有一个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中配置密钥:
这些密钥与我用于成功访问开发计算机上的秘密的密钥相同。
那么我做错了什么?
答案 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 projects和Working with Azure App Services Application Settings and Connection Strings in ASP.NET Core。