我有一个.NET Core 3.1控制台应用程序,该应用程序需要访问KeyVault
在Visual Studio中作为控制台运行此应用程序时,一切都很好,因为Visual Studio是使用Azure凭据登录的,因此可以授予访问权限
但是,实际上,该应用程序在Docker内部运行
Visual Studio提供了在docker内部运行应用程序的选项
启动代码如下
public static IHostBuilder CreateHostBuilder(string[] args) =>
Host.CreateDefaultBuilder(args)
.ConfigureAppConfiguration((context, config) =>
{
var keyVaultEndpoint = new Uri(Environment.GetEnvironmentVariable("VaultUri"));
config.AddAzureKeyVault(
keyVaultEndpoint,
new DefaultAzureCredential());
})
.ConfigureWebHostDefaults(webBuilder =>
{
webBuilder.UseStartup<Startup>();
})
.ConfigureLogging(logging =>
{
logging.ClearProviders();
logging.SetMinimumLevel(Microsoft.Extensions.Logging.LogLevel.Trace);
})
.UseNLog(); // NLog: Setup NLog for Dependency injection
}
从Visual Studio在Docker内部运行时,上述带有Value的错误不能为null
我认为这是因为DefaultAzureCredential无法正常工作
这是仅开发环境的问题
我该如何解决?
保罗
您需要对容器进行身份验证,看起来有很多方法可以做到这一点。
为将部署到Azure的应用程序提供默认的TokenCredential身份验证流。如果启用,将尝试以下凭据类型:
EnvironmentCredential,ManagedIdentityCredential,SharedTokenCacheCredential,VisualStudioCredential,VisualStudioCodeCredential,AzureCliCredential,InteractiveBrowserCredential
在VS中工作时,您可能一直在使用VisualStudioCredential而不意识到它,因为您的环境隔离在Docker容器中,因此您需要手动进行身份验证。我可能会使用EnvironmentCredential,因为您只需要通过环境变量获取凭据并将其公开给容器即可。
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句