AptNetCore使用Secrets管理私密資料
前言
在專案中, 資料庫連線, 賬戶及密碼等如果儲存在appsetting.json
中就太不安全了, 所以生產時都是放在環境變數中讀取的.
在開發中可能存在每一臺開發機用到的一些變數都不一樣的情況, 這個時候如果寫在appsettings.Development.json
中每次提交版本控制就不方便了.
所以dotnet-cli貼心的提供了 user-secrets
命令, 來管理開始時使用者的私密資料.
使用
設定UserSecretsId
在專案根目錄輸入 dotnet user-secrets list
, 可以看到錯誤提示
Could not find the global property `UserSecretsId` in MSBuild project `/home/xueyou/website-demo/website-demo.csproj`. Ensure this property is set in the project or use the `–id` command line option.
這提示我們, 要想使用Secrets管理機密, 需先定義UserSecretsId
並且根據上面的提示可以知道, 它在.csproj
檔案中尋找UserSecretsId
, 那我們就在此檔案中定義UserSecretsId
編輯.csproj
檔案在PropertyGroup
內增加<UserSecretsId>79a3edd0-2092-40a2-a04d-dcb46d5ca9ed</UserSecretsId>
UserSecretsId
值是GUID生成的, 每一個值都會實際對應到資料夾的名稱上
- windows中,
%APPDATA%MicrosoftUserSecrets<user_secrets_id>secrets.json
- linux中,
~/.microsoft/usersecrets/<user_secrets_id>/secrets.json
設定機密
dotnet user-secrets set "WeChatAppKey" "X3423FEED2435DD"
其中keyWeChatAppKey
是dotnet core配置系統中的key, 所以可以是:
號分隔, 對映到配置樹
dotnet user-secrets list
可以檢視當前機密
程式碼中訪問機密
public class Startup
{
private string _wechatKey= null;
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
public void ConfigureServices(IServiceCollection services)
{
_wechatKey = Configuration["WeChatAppKey"];
}
public void Configure(IApplicationBuilder app)
{
var result = string.IsNullOrEmpty(_wechatKey) ? "Null" : "Not Null";
app.Run(async (context) =>
{
await context.Response.WriteAsync($"Secret is {result}");
});
}
}
腳註
[ASP.NET Core 優雅的在開發環境儲存機密](https://www.cnblogs.com/savorboard/p/dotnetcore-user-secrets.html)