Azure KeyVault: Azure .Identity.CredentialUnavailableException: DefaultAzureCredential не удалось получить токен из включенных учетных данных - PullRequest
2 голосов
/ 09 июля 2020

Я пытаюсь подключить свое основное приложение as pnet, на которое нацелено. net framework с Azure Keyvault. На новой azure vm, поддерживающей идентификацию, все работает нормально, но это приложение размещено на classi c azure vm, которая не поддерживает идентификацию. Я сделал переменную системной среды AzureServiceAuthConnectionString, которая отделяется от других. net каркасные приложения с Azure keyvault уже используются и работают отлично.

Глядя на мои журналы стандартного вывода, я каждый раз получаю следующее исключение.

Azure.Identity.CredentialUnavailableException: DefaultAzureCredential failed to retrieve a token from the included credentials
EnvironmentCredential authentication unavailable. Environment variables are not fully configured
ManagedIdentityCredential authentication unavailable, the requested identity has not been assigned to this resource.

Я использую следующий код при запуске:

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>
            WebHost.CreateDefaultBuilder(args)               
       .UseApplicationInsights(ConfigurationManager.AppSettings["applicationInsightsInstrumentationKey"])
                .ConfigureKestrel(options => options.AddServerHeader = false)
                .UseIISIntegration()
                .ConfigureAppConfiguration((context, config) =>
                {
                    var vaultName = ConfigurationManager.AppSettings["VaultName"];
                    if (!string.IsNullOrEmpty(vaultName))
                    {
                        var azureServiceTokenProvider = new AzureServiceTokenProvider();
                        var keyVaultClient = new KeyVaultClient(
                            new KeyVaultClient.AuthenticationCallback(
                                azureServiceTokenProvider.KeyVaultTokenCallback));

                        config.AddAzureKeyVault(
                            $"https://{vaultName}.vault.azure.net/",
                            keyVaultClient,
                            new DefaultKeyVaultSecretManager());
                    }
                })
                .UseStartup<Startup>();

И в web.config следующие элементы:

   <configSections>
      <section name="configBuilders" type="System.Configuration.ConfigurationBuildersSection, System.Configuration, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a" restartOnExternalChanges="false" requirePermission="false"/>
   </configSections>
   <configBuilders>
    <builders>
      <add name="AzureKeyVault" vaultName="<#= this.VaultName #>" type="Microsoft.Configuration.ConfigurationBuilders.AzureKeyVaultConfigBuilder, Microsoft.Configuration.ConfigurationBuilders.Azure, Version=2.0.0.0, Culture=neutral" vaultUri="https://<#= this.VaultName #>.vault.azure.net" />
    </builders>
  </configBuilders>
  <connectionStrings configBuilders="AzureKeyVault">
      <add name="ConnectionString" connectionString="" providerName="System.Data.SqlClient"/>
  </connectionStrings>

Ответы [ 2 ]

2 голосов
/ 09 июля 2020

Не могли бы вы проверить, что вы устанавливаете следующие системные переменные среды ?

AZURE_CLIENT_ID - идентификатор приложения принципала службы

AZURE_TENANT_ID - идентификатор основного Azure клиент Active Directory

AZURE_CLIENT_SECRET - один из секретов клиента принципала службы

0 голосов
/ 09 июля 2020

Существует одна проблема с github для этого типа

https://github.com/Azure/azure-sdk-for-net/issues/8658

...