Azure ASP.NET核心3:Don';t如果可以';t通行钥匙保险库
我有一个ASP.NET Core 3应用程序,它使用Azure Key Vault。只要我在VisualStudio中登录到我的Microsoft帐户,它在生产中运行良好,在vs2019中也可以进行良好的调试。但当我没有登录到VS时,它会失败并阻止应用程序启动,而不是继续应用程序启动。我希望当一个开发人员没有登录到VS时(其他开发人员也是这样工作的)。以下是相关的启动代码:Azure ASP.NET核心3:Don';t如果可以';t通行钥匙保险库,azure,asp.net-core,azure-keyvault,asp.net-core-3.0,Azure,Asp.net Core,Azure Keyvault,Asp.net Core 3.0,我有一个ASP.NET Core 3应用程序,它使用Azure Key Vault。只要我在VisualStudio中登录到我的Microsoft帐户,它在生产中运行良好,在vs2019中也可以进行良好的调试。但当我没有登录到VS时,它会失败并阻止应用程序启动,而不是继续应用程序启动。我希望当一个开发人员没有登录到VS时(其他开发人员也是这样工作的)。以下是相关的启动代码: public static IHostBuilder CreateHostBuilder(string[] args)
public static IHostBuilder CreateHostBuilder(string[] args)
{
{
static string GetKeyVaultEndpoint() => "https://[myappvalut].vault.azure.net";
var azureServiceTokenProvider = new AzureServiceTokenProvider();
var keyVaultClient = new KeyVaultClient(
new KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback));
return Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.ConfigureHostConfiguration(c => c.AddAzureKeyVault(GetKeyVaultEndpoint(), keyVaultClient, new DefaultKeyVaultSecretManager()));
}
}
公共静态IHostBuilder CreateHostBuilder(字符串[]args)
{
{
静态字符串GetKeyVaultEndpoint()=>“https://[myappvalut].vault.azure.net”;
var azureServiceTokenProvider=新azureServiceTokenProvider();
var keyVaultClient=新的keyVaultClient(
新建KeyVaultClient.AuthenticationCallback(
azureServiceTokenProvider.KeyVaultTokenCallback);
返回Host.CreateDefaultBuilder(args)
.ConfigureWebHostDefaults(webBuilder=>
{
webBuilder.UseStartup();
})
.ConfigureHostConfiguration(c=>c.AddAzureKeyVault(GetKeyVault端点()、KeyVault客户端、新的DefaultKeyVault SecretManager());
}
}
以下是我在创业时遇到的一个例外:
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProviderException:
'参数:连接字符串:[未指定连接字符串],
资源:,授权:
. 异常消息:已尝试
以下三种方法可以获得访问令牌,但都不起作用
是否有任何优雅的方法可以从中恢复并继续启动应用程序,或者仅在我知道我有连接字符串时添加密钥库?您可以使用服务主体访问密钥库。这是文件
string clientId = Environment.GetEnvironmentVariable("akvClientId");
string clientSecret = Environment.GetEnvironmentVariable("akvClientSecret");
KeyVaultClient kvClient = new KeyVaultClient(async (authority, resource, scope) =>
{
var adCredential = new ClientCredential(clientId, clientSecret);
var authenticationContext = new AuthenticationContext(authority, null);
return (await authenticationContext.AcquireTokenAsync(resource, adCredential)).AccessToken;
});
您可以使用服务主体访问密钥库。这是文件
string clientId = Environment.GetEnvironmentVariable("akvClientId");
string clientSecret = Environment.GetEnvironmentVariable("akvClientSecret");
KeyVaultClient kvClient = new KeyVaultClient(async (authority, resource, scope) =>
{
var adCredential = new ClientCredential(clientId, clientSecret);
var authenticationContext = new AuthenticationContext(authority, null);
return (await authenticationContext.AcquireTokenAsync(resource, adCredential)).AccessToken;
});
我的文章中有一个可以改编的例子: 基本上,您可以从在此之前注册的提供程序构造配置,并检查是否有密钥vault URL。 在您的案例中,您应该能够采取类似的方法 注意:此示例是为ASP.NET Core 2.1制作的:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureAppConfiguration((ctx, builder) =>
{
//Build the config from sources we have
var config = builder.Build();
var keyvaultUrl = config["KeyVault:BaseUrl"];
if (!string.IsNullOrEmpty(keyVaultUrl))
{
//Add Key Vault to configuration pipeline
builder.AddAzureKeyVault(keyvaultUrl);
}
})
.Build();
公共静态IWebHost BuildWebHost(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.ConfigureAppConfiguration((ctx,构建器)=>
{
//从我们已有的源代码构建配置
var config=builder.Build();
var keyvaultUrl=config[“KeyVault:BaseUrl”];
如果(!string.IsNullOrEmpty(KeyVault URL))
{
//将密钥库添加到配置管道
builder.AddAzureKeyVault(KeyVault URL);
}
})
.Build();
我的文章中有一个可以改编的例子:
基本上,您可以从在此之前注册的提供程序构造配置,并检查是否有密钥vault URL。
在您的案例中,您应该能够采取类似的方法
注意:此示例是为ASP.NET Core 2.1制作的:
public static IWebHost BuildWebHost(string[] args) =>
WebHost.CreateDefaultBuilder(args)
.UseStartup<Startup>()
.ConfigureAppConfiguration((ctx, builder) =>
{
//Build the config from sources we have
var config = builder.Build();
var keyvaultUrl = config["KeyVault:BaseUrl"];
if (!string.IsNullOrEmpty(keyVaultUrl))
{
//Add Key Vault to configuration pipeline
builder.AddAzureKeyVault(keyvaultUrl);
}
})
.Build();
公共静态IWebHost BuildWebHost(字符串[]args)=>
WebHost.CreateDefaultBuilder(args)
.UseStartup()
.ConfigureAppConfiguration((ctx,构建器)=>
{
//从我们已有的源代码构建配置
var config=builder.Build();
var keyvaultUrl=config[“KeyVault:BaseUrl”];
如果(!string.IsNullOrEmpty(KeyVault URL))
{
//将密钥库添加到配置管道
builder.AddAzureKeyVault(KeyVault URL);
}
})
.Build();