Мы уже некоторое время успешно используем Microsoft.Azure.KeyVault
. Использование управляемого удостоверения в наших веб-приложениях и группе AD для предоставления доступа к хранилищу ключей.
Я обновил несколько приложений, чтобы использовать пакет Azure.Identity
, и приложение. Net Framework продолжает работать , но приложение. Net Core 3.1 теперь, похоже, не принимает учетные данные.
Если я добавлю явные AZURE_CLIENT_ID
, AZURE_CLIENT_SECRET
и AZURE_TENENT_ID
, которые соответствуют RBA C сгенерирован сервисный принцип, все работает нормально. Я не хочу этого делать и предпочел бы использовать управляемую идентификацию (конфигурация отсутствует).
Это пакеты, на которые я сейчас ссылаюсь:
<PackageReference Include="Azure.Identity" Version="1.1.1" />
<PackageReference Include="Azure.Security.KeyVault.Secrets" Version="4.0.3" />
Это код конструкции:
new SecretClient("name-of-vault", new DefaultAzureCredential());
Так что ничего особенного.
Это трассировка стека:
---> Azure .Identity.AuthenticationFailedException: Ошибка аутентификации DefaultAzureCredential. ---> Azure .Identity.AuthenticationFailedException: недопустимый ответ, ответ аутентификации не был в ожидаемом формате. в Azure .Identity.ManagedIdentityClient.Deserialize (JsonElement json) в Azure .Identity.ManagedIdentityClient.DeserializeAsyn c (содержимое потока, CancellationToken cancellationToken) в Azure .Identity.ManagedIdentityClient ( String [] scopes, CancellationToken cancellationToken) в Azure .Identity.ManagedIdentityCredential.GetTokenImplAsyn c (TokenRequestContext requestContext, CancellationToken cancellationToken) --- Конец трассировки стека внутренних исключений --- в *. c (Boolean isAsyn c, TokenRequestContext requestContext, CancellationToken cancellationToken) в Azure .Identity.DefaultAzureCredential.GetTokenAsyn c (TokenRequestContext requestContext, CancellationToken cancellurity.AnticationToken *. * (Сообщение HttpMessage, логический асинхронный c, вызов AuthenticationChallenge) в Azure .Security.KeyVault.ChallengeBasedAuthenti cationPolicy.ProcessCoreAsyn c (сообщение HttpMessage, конвейер ReadOnlyMemory1, логический асинхронный c) в Azure .Core.Pipeline.RetryPolicy.ProcessAsyn c (сообщение HttpMessage, конвейер ReadOnlyMemory1 c) asyn *1049*) * .Core.Pipeline.RetryPolicy.ProcessAsyn c (сообщение HttpMessage, конвейер ReadOnlyMemory1, логический асинхронный c) в Azure .Core.Pipeline.HttpPipelineSynchronousPolicy.ProcessAsyn c (HttpMessage message * (HttpMessage) сообщение * (HttpMessage) * .Core.Pipeline.HttpPipelineSynchronousPolicy.ProcessAsyn c (сообщение HttpMessage, конвейер ReadOnlyMemory1) в Azure .Core.Pipeline.HttpPipeline.SendRequestAsyn c (запрос запроса, CancellationTokey cancellation * .CancellationToken cancellation *. KeyVaultPipeline.SendRequestAsyn c (запрос запроса, CancellationToken cancellationToken) в Azure .Security.KeyVault.KeyVaultPipeline.SendRequestAsync [TResult] (метод RequestMethod, Func1 resultFactory, * CancellationToken path cancellation [10]). .KeyVault.Secrets.SecretClient.GetSecretAsyn c (имя строки, версия строки, CancellationToken cancellationToken) в Codat.Infrastructure.SecretsProvider.SecretsProvider. <> C__DisplayClass18_0.d.MoveNext ()