在开发阶段,.NET Secret Manager 是管理敏感配置(如 API 密钥、数据库连接字符串)最轻量又安全的方式——它把密钥存在用户目录下,不进代码库,也不影响生产环境。
Secret Manager 是什么
它是 .NET CLI 提供的本地开发工具,专为 Windows/macOS/Linux 用户设计,用于存储应用在开发时用到的机密数据。这些数据保存在操作系统当前用户的专属目录中(比如 ~/.microsoft/usersecrets/),和项目绑定但不随源码提交,也不会被发布到生产环境。
注意:它只适用于 开发阶段。部署时应改用环境变量、Azure Key Vault 或其他生产级方案。
启用 Secret Manager
确保项目是基于 .NET 6+ SDK 风格 的(即 csproj 中有
<targetframework>net6.0</targetframework>)。然后执行以下操作: 在项目根目录打开命令行(确保已 cd 到 .csproj 所在文件夹) 运行:
dotnet user-secrets init—— 这会为项目生成一个唯一的 UserSecretsId 并写入 csproj 检查 csproj,确认已自动添加类似:
<usersecretsid>12345678-90ab-cdef-ghij-klmnopqrstuv</usersecretsid>
存取密钥的常用命令
所有命令都在项目目录下执行:
dotnet user-secrets set "MyApiKey" "abc123xyz"—— 设置单个键值
dotnet user-secrets set "ConnectionStrings:Default" "Server=...;Database=..."—— 支持冒号层级(对应 IConfiguration 的嵌套结构)
dotnet user-secrets list—— 查看当前项目所有密钥(明文显示,仅限本机)
dotnet user-secrets remove "MyApiKey"—— 删除某个键
dotnet user-secrets clear—— 清空本项目所有密钥
设置后无需重启应用,只要项目已引用
Microsoft.Extensions.Configuration.UserSecrets(.NET 6+ 默认包含),并在
Program.cs中调用了
builder.Configuration.AddUserSecrets<program>()</program>(新模板已默认启用)即可自动加载。
在代码里读取密钥
和读普通配置一样,通过
IConfiguration获取:
var apiKey = configuration["MyApiKey"];
var connStr = configuration.GetConnectionString("Default"); // 自动匹配 ConnectionStrings:Default
也可以注入
IConfiguration到服务中使用,完全无感集成。
基本上就这些。不复杂但容易忽略 init 和 csproj 绑定,设完记得
list确认一下是否生效。
