Azure存储使用情况DevelopmentStorage =使用KeyVault时为真

yqkkidmi  于 2023-01-09  发布在  其他
关注(0)|答案(1)|浏览(142)

我已将API配置为使用托管标识从Azure KeyVault获取Azure存储连接字符串。
现在的问题是,当我在Visual Studio中本地运行代码时,它不再使用appsettings.development.json中的连接字符串"StorageAccount": "UseDevelopmentStorage=true"
因此,我不能在本地运行时使用模拟器。
我在控制器中创建了以下条件来解决此问题:

public FileController(IConfiguration configuration, IWebHostEnvironment env)
    {
        this.configuration = configuration;

        if (env.IsDevelopment())
        {
            conn = this.configuration.GetConnectionString("StorageAccount");

        }
        else
        {
            conn = this.configuration["StorageConnectionString"];

        }
    }

这样做合适吗?

lhcgjxsq

lhcgjxsq1#

在本地,如果您的ASPNETCORE_ENVIRONMENT设置为Development,那么它将读取您的本地存储帐户,如UseDevelopmentStorage=true
当你发布到azure时,它将使用你的web应用的MSI从密钥库获取connectionstring。
有关更多详细信息,请参考以下代码:

private IConfiguration _configuration;
private IWebHostEnvironment _env;

public WeatherForecastController(IConfiguration configuration, IWebHostEnvironment env)
{
    _configuration = configuration;
    _env = env;
}

if (_env.IsDevelopment())
{
    con = _configuration.GetSection("StorageAccount").Value;
}
else
{
    AzureServiceTokenProvider azureServiceTokenProvider = new AzureServiceTokenProvider();
    var keyVaultClient = new KeyVaultClient(new KeyVaultClient.AuthenticationCallback(azureServiceTokenProvider.KeyVaultTokenCallback));
    con = keyVaultClient.GetSecretAsync("https://xxxx.vault.azure.net/secrets/xxxx").GetAwaiter().GetResult().Value;

}

相关问题