1
1

More than 1 year has passed since last update.

ASP.NET Core でローカルにシークレットをサクッと用意する

Last updated at Posted at 2023-06-13

API の接続キーをデバッグ実行時に安全に取り扱いたいですよね。
ハードコードしてリポジトリにプッシュなんかしちゃいけない。

ASP.NET Core と VisualStudio の開発環境だったら、とっても簡単に管理できます。

環境

Microsoft Visual Studio Community 2022 (64 ビット) - Current
Version 17.6.2

.NET 6

手順

1. ユーザーシークレットを追加する

  1. プロジェクトファイルを右クリック
  2. [ユーザー シークレットの管理(G)] をクリック
  3. secrets.json がテキストエディタ―で開かれるのでシークレットを追加する
secrets.json
{
  "Demo": {
    "Secret": "demo-secret"
  }
}

JSON ファイルは以下に保存されます。
%APPDATA%\Microsoft\UserSecrets\<user_secrets_id>\secrets.json

このプロジェクトをプルした人は、[ユーザーシークレットの管理(G)] をクリックするとプロジェクトに設定された <user_secrets_id> で JSON ファイルが作成されるので、そのファイルにシークレットを書いてあげれば OK です。

2. IConfiguration を DI してシークレットを取得する

ASP.NET Core では何も設定せずに IConfiguration が DI されます。受け取る部分だけ実装してあげれば簡単にシークレットを取得できます。
今回は、ASP.NET Core MVC プロジェクトを新規作成したときの HomeController で上記シークレットを使ってみます。

  1. IConfiguration をコンストラクターで DI する
HomeController.cs
+   private readonly IConfiguration _configuration;
    private readonly ILogger<HomeController> _logger;

    public HomeController(
+       IConfiguration configuration,
        ILogger<HomeController> logger)
    {
+       _configuration = configuration;
        _logger = logger;
    }

2. Index() メソッドでシークレットを取得してみる

HomeController.cs
public IActionResult Index()
{
+   IConfigurationSection config = _configuration.GetSection("Demo:Secret");
+   string value = config.Value;
+   if (string.IsNullOrEmpty(value))
+   {
+       _logger.LogError("Empty configuration!");
+   }
+   else
+   {
+       _logger.LogInformation("Value: {Value}", value);
+   }
+
    return View();
}

3. デバッグ実行して確認

info: HigeDaruma.WebAppDIDemo.UI.AspNetCoreMvc.Controllers.HomeController[0]
      Value: demo-secret

あっという間にできました。これでソースコード上にシークレットを書く必要がなくなりました。
運用環境では Azure App Service などの環境変数としてシークレットを設定してあげれば良いでしょう。
いや、Key Vault を使わなきゃならないか・・・

参考

1
1
1

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
1
1