ubuntu中使用機密資料Secrets

學友2000發表於2018-10-18

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)

在開發期間安全儲存應用機密

相關文章