かつ丼はおやつに入りますか?

コンピュータの話とか食べ物の話とか旅行とかいろいろ

.NET6のASP.NET MVCでシークレットマネージャーを使う[memo]

前置き

パスワードやDB接続情報は安全に扱いたい。 本番環境は環境変数またはAzure Key Vaultなどのデプロイ環境に応じた方法で管理するが、開発環境ではシークレットマネージャーツールというものが用意されている。

環境

登録方法

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というインターフェースによって環境に応じて適切なところから設定情報を読み込んでくれるんじゃなかろうかと思ってる。