shuhelohelo’s blog

Xamarin.Forms多めです.

ASP.NET Core以外でUserSecretsを利用する

tech-blog.cloud-config.jp

↑こちらの記事がとてもわかり易いです.

ソース管理サービスを利用した場合に,ワールドワイドに公開してしまう可能性があり,クラウドサービスの接続情報などをそのまま書いていると危険.

なので,このような機密情報はソース管理,つまりプロジェクトには含まれないようにしたい.

そのためにUserSecretsがある.

これはローカル開発用に機密情報を別の場所に保存したり利用したりする仕組みで,.NET Coreに用意されている.

使い方は簡単で,プロジェクトを右クリックして「Manage User Secrets」を選択します. secrets.jsonファイルがVisual Studioで開かれるので,そこに機密情報を記述するだけ.

f:id:shuhelohelo:20191110135955p:plain

appsettings.jsonに記述されている機密情報をそのままsecrets.jsonに切り取って貼り付けるだけで,コードを変更する必要はない.

例えば,appsetting.jsonに以下のように接続文字列が書かれていたとする.ローカルDBなので公開しても構わないけれど.

{
  "Logging": {
    "LogLevel": {
      "Default": "Information",
      "Microsoft": "Warning",
      "Microsoft.Hosting.Lifetime": "Information"
    }
  },
  "AllowedHosts": "*",
  "ConnectionStrings": {
    "StudentDb": "Server=.\\SQLEXPRESS;Database=SchoolDB;Trusted_Connection=True;"
  }
}

このうち,ConnectionStringsが該当の部分.

  "ConnectionStrings": {
    "StudentDb": "Server=.\\SQLEXPRESS;Database=SchoolDB;Trusted_Connection=True;"
  }

これを切り取って,secrets.jsonに貼り付ける.

{
  "ConnectionStrings": {
    "StudentDb": "Server=.\\SQLEXPRESS;Database=SchoolDB;Trusted_Connection=True;"
  }
}

これだけでOK.

利用する場合

ASP.NET Coreプロジェクト以外では,各種の設定情報ソースにアクセスするためにプロバイダーをインストールする必要がある

なるほど,ASP.NET Coreだとこのあたりはもとからフレームワークの方で用意されているということか.

            var builder = new ConfigurationBuilder()
                .SetBasePath(Directory.GetCurrentDirectory())
                .AddJsonFile(path: "appsettings.json")
                .AddEnvironmentVariables(prefix: "DOTNET_")
                .AddUserSecrets<Program>(optional: true);
            var configuration = builder.Build();

            Console.WriteLine(configuration["Books:ConnectionString"]);

こうやって何を設定情報のソースとして使用するかを設定する.

設定情報は以下の順で読み込まれ,同じキーがあった場合は,上書きされていく.

今回のソースコード

github.com