appsettings.json用机密替换字符串-利用 VisualStudio 管理用户机密
以纯文本形式存储密码是不安全的。 例如,存储在中的数据库连接字符串 appsettings.json 可能包含指定用户的
密码:
{
"ConnectionStrings": {
"Movies": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;
User Id=johndoe;Password=pass123;MultipleActiveResultSets=true"
}
}
更安全的方法是将密码存储为机密。 例如:
dotnet user-secrets set "DbPassword" "pass123"
Password 从中的连接字符串中移除键值对 appsettings.json 。 例如:
{
"ConnectionStrings": {
"Movies": "Server=(localdb)\\mssqllocaldb;Database=Movie-1;
User Id=johndoe;MultipleActiveResultSets=true"
}
}
可以对对象的属性设置机密的值 SqlConnectionStringBuilder Password ,以完成连接字符串:
using System.Data.SqlClient;
var builder = WebApplication.CreateBuilder(args);
var conStrBuilder = new SqlConnectionStringBuilder
(builder.Configuration.GetConnectionString("Movies"));
conStrBuilder.Password = builder.Configuration["DbPassword"];
var connection = conStrBuilder.ConnectionString;
var app = builder.Build();
app.MapGet("/", () => connection);
app.Run();
列出机密
假设文件上的应用 secrets.js 包含以下两个机密:
{
"Movies": {
"ServiceApiKey": "12345",
"ConnectionString":
"Server=(localdb)\\mssqllocaldb;Database=Movie- 1;
Trusted_Connection=True;MultipleActiveResultSets=true"
}
}
从项目文件所在的目录运行以下命令:
dotnet user-secrets list
随即显示以下输出
Movies:ConnectionString = Server=(localdb)\mssqllocaldb;Database=Movie- 1;
Trusted_Connection=True;
MultipleActiveResultSets=true Movies:ServiceApiKey = 12345
在前面的示例中,键名称中的冒号表示 机密 json 中的对象层次结构。
删除单个机密
假设文件上的应用 secrets.js 包含以下两个机密:
{
"Movies": {
"ServiceApiKey": "12345",
"ConnectionString": "Server=(localdb)\\mssqllocaldb;Database=Movie- 1;
Trusted_Connection=True;MultipleActiveResultSets=true" }
}
从项目文件所在的目录运行以下命令:
dotnet user-secrets remove "Movies:ConnectionString"
已修改应用的 机密 json 文件,以删除与密钥关联的键值对 MoviesConnectionString :
{ "Movies": { "ServiceApiKey": "12345" } }
删除所有机密 -- 从项目文件所在的目录运行以下命令:
若要在 Visual Studio 中管理用户机密,请在解决方案资源管理器中右键单击项目,然后选择 "管理用户机密"
dotnet user-secrets clear
利用 VisualStudio 管理用户机密