在 ASP.NET Core 中預設是使用 appsettings.json 設定檔儲存設定值,也可以使用 appsettings.{Environment}.json 這樣的方式來儲存特定環境的設定檔,例如開發環境: appsettings.Development.json
。
在 ASP.NET Core 中還有提供另一種方式來儲存機密資訊,就是本篇要介紹的 Secret Manager (User Secrets) ,適合用在開發階段中儲存機密資訊,不會將這些資料寫在上面提到的 appsettings.json 設定檔內,避免不小心將資料儲存至 git 等版本控制中,並且使用方式和 appsettings.json 設定檔一模一樣,但是優先度更高,兩個地方都有同樣的內容時會以 Secret Manager 的為主,不過此方式還是使用明文儲存,不適合在正式環境中使用。
就會自動產生 UserSecretsId 並寫到專案的 .csproj 檔案中
有許多種讀取方式,這裡示範最簡單的在 Program.cs 中讀取設定值的方式:
我們可以使用下列指令來設定/更新設定值內容:
以上面的範例可以這樣設定:
再次執行專案就會發現已經從 User Secrets 中讀取設定值了,執行結果為:
移除指定設定值:
移除全部設定值:
Windows
Linux/macOS
在 dotnet user-secrets init 後檔案並不會直接建立,要等到使用 dotnet user-secrets set 後才會實際建立檔案。
參考資料:
Microsoft.Learn - Safe storage of app secrets in development in ASP.NET Core
在 ASP.NET Core 中還有提供另一種方式來儲存機密資訊,就是本篇要介紹的 Secret Manager (User Secrets) ,適合用在開發階段中儲存機密資訊,不會將這些資料寫在上面提到的 appsettings.json 設定檔內,避免不小心將資料儲存至 git 等版本控制中,並且使用方式和 appsettings.json 設定檔一模一樣,但是優先度更高,兩個地方都有同樣的內容時會以 Secret Manager 的為主,不過此方式還是使用明文儲存,不適合在正式環境中使用。
啟用 Secret Manager 儲存設定值
到專案目錄下(有 .csproj 檔案的那一層)執行下列程式碼:
dotnet user-secrets init
就會自動產生 UserSecretsId 並寫到專案的 .csproj 檔案中
<Project Sdk="Microsoft.NET.Sdk.Web">
<PropertyGroup>
<TargetFramework>net8.0</TargetFramework>
<Nullable>enable</Nullable>
<ImplicitUsings>enable</ImplicitUsings>
<UserSecretsId>3b79d513-e6f7-4eab-85f3-bfe358ae7434</UserSecretsId>
</PropertyGroup>
</Project>
增加/修改設定值
假設在 appsettings.json 中有以下設定值:
{
"Key1": "Value1",
"Key2": {
"SubKey1": "Value2",
"SubKey2": 100
}
}
有許多種讀取方式,這裡示範最簡單的在 Program.cs 中讀取設定值的方式:
var app = builder.Build();
var key1 = builder.Configuration["Key1"];
var subKey1 = builder.Configuration["Key2:SubKey1"];
var subKey2 = builder.Configuration["Key2:SubKey2"];
Console.WriteLine($"Key1: {key1}");
Console.WriteLine($"SubKey1: {subKey1}");
Console.WriteLine($"SubKey2: {subKey2}");
// Key1: Value1
// SubKey1: Value2
// SubKey2: 100
我們可以使用下列指令來設定/更新設定值內容:
dotnet user-secrets set "Key" "Value"
以上面的範例可以這樣設定:
dotnet user-secrets set "Key1" "S1"
dotnet user-secrets set "Key2:SubKey1" "S2-1"
dotnet user-secrets set "Key2:SubKey2" "S2-2"
再次執行專案就會發現已經從 User Secrets 中讀取設定值了,執行結果為:
Key1: S1
SubKey1: S2-1
SubKey2: S2-2
Secret Manager 常用指令
查看所有設定值:
dotnet user-secrets list
移除指定設定值:
dotnet user-secrets remove [key]
移除全部設定值:
dotnet user-secrets remove clear
Secret Manager 設定值儲存位置
依照不同的作業系統這些設定值會儲存在下列位置:Windows
%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json
Linux/macOS
~/.microsoft/usersecrets/<user_secrets_id>/secrets.json
在 dotnet user-secrets init 後檔案並不會直接建立,要等到使用 dotnet user-secrets set 後才會實際建立檔案。
參考資料:
Microsoft.Learn - Safe storage of app secrets in development in ASP.NET Core
感謝教學~
回覆刪除