.NET6のASP.NET MVCでシークレットマネージャーを使う[memo]
前置き
パスワードやDB接続情報は安全に扱いたい。 本番環境は環境変数またはAzure Key Vaultなどのデプロイ環境に応じた方法で管理するが、開発環境ではシークレットマネージャーツールというものが用意されている。
環境
- Windows
- Visual Studio 2022 Community
- .NET6
- ASP.NET MVC WebAPI
登録方法
Visual Studioでソリューションを開いて、ソリューションエクスプローラーからプロジェクトを右クリック。
ユーザーシークレットの管理
をクリックすると secrets.json
が開く。
ここにjson形式でkey valueを登録する。
階層構造の場合はkeyの値を :
で区切ってもよい。以下は同じ扱いになる。
{ "db" : { "oracle": "oracle connection string" } }
{ "db:oracle": "oracle connection string" }
secrets.jsonの保存場所は以下になる。完全にリポジトリ管理から外れる形なのが良い。
%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json
使用方法
public class TestController : ControllerBase { private readonly IConfiguration _configuration; public TestController(IConfiguration configuration) { _configuration = configuration; } public IActionResult ReadConfiguration(){ string connectString = _configuration["db:oracle"]; ... } }
ControllerのコンストラクタでIConfigurationを受け取って読み込める。
このIConfigurationというインターフェースによって環境に応じて適切なところから設定情報を読み込んでくれるんじゃなかろうかと思ってる。