首页 > 解决方案 > 如何使用 Keyvault 将 asp.net 5 API 连接到存储在 Azure 中的数据库

问题描述

我目前正在尝试开发一个可以访问数据库的 API(在 Azure 上运行),但出于明显的安全原因,我不想将连接字符串以明文形式放入我的 appsetting.json 文件中,而是使用 Keyvault。

因此,我已经创建了资源组、数据库、API 管理服务和 Keyvault,我已经在其中创建了包含我的 API 请求者的连接字符串的密钥。在 Keyvault 的访问策略中,我已经为我的 API 添加了一个条目,并授予它获取和列出机密的权限。这是一个屏幕截图。

Keyvault 权限(对不起链接,我还不允许嵌入图像)

在我的应用程序中,我拥有所需的所有模型和控制器。

现在我的问题是,如何从我的 API 中使用这个秘密连接到我的数据库?

我的 Program.CreateHostBuilder 类看起来像这样

public static IHostBuilder CreateHostBuilder(string[] args) =>
        Host.CreateDefaultBuilder(args)
        .ConfigureAppConfiguration(async (context, builder) =>
        {
            var client = new SecretClient(
              new Uri("https://example.vault.azure.net/"),
              new DefaultAzureCredential());
            KeyVaultSecret secret = await client.GetSecretAsync("ConnectionString");
            string authenticationKey = secret.Value;
        }
    ).ConfigureWebHostDefaults(webBuilder =>
    {
        webBuilder.UseStartup<Startup>();
    });

我必须从那里做什么才能让我的应用程序连接到数据库?

感谢您的阅读!:)

标签: c#sql-serverasp.net-web-apiazure-keyvaultasp.net5

解决方案


For .net Core and already having Azure Key Vault in place. Let's assume your connection string is in your appsettings.json:

{
   "ConnectionStrings": {
      "MyDatabase": "server=127.0.0.1;port=5678;database=mydb;user=name;password=Password "
   } 
}

And you do your setup in Startup.cs:

string connectionString = configuration.GetConnectionString("MyDatabase");

In Azure Key Vault, create a secret:

  • Name: ConnectionStrings--MyDatabase
  • Value: server=127.0.0.1;port=5678;database=mydb;user=name;password=Password

enter image description here

The IConfiguration.GetConnectionString("MyDatabase") now takes the value from the Key Vault.

Note: In your key vault, the name of your secret should match with the name of your connection string.

After getting connection string connect to database and perform the database operation

For more details refer this Thread


推荐阅读