Я реализовал решение, использующее хранилище ключей Azure для ключей шифрования.Я следовал рекомендациям из документов на https://docs.microsoft.com/en-us/azure/app-service/app-service-managed-service-identity, чтобы выполнить проверку подлинности моей службы приложений в хранилище ключей Azure с использованием идентификатора управляемой службы.Мой сервис приложений - это приложение asp.net core 2.1.
Это работает, когда я публикую сервис приложений в моей подписке Azure, поэтому я уверен, что реализация верна.Проблема заключается в локальном запуске кода и попытке подключиться к хранилищу ключей Azure с помощью MSI, как мне показалось, не работает, как было объявлено.
Я работаю в Visual Studio 2017 версии 15.8.5.Моя корпоративная идентификация в Azure Active Directory - это то, как я вошел в VS (т.е. sbraswell@myemployer.com).Однако подписка Azure, которую я использую, является частью преимуществ моего партнера MSDN и связана с моей учетной записью Microsoft (MSA) (т. Е. something@hotmail.com).Я предоставил моей корпоративной учетной записи AAD полномочия «Владелец» для моей подписки.Я могу войти на портал Azure как моя корпоративная идентификация и получить доступ ко всем аспектам моей подписки Azure, связанной с моей учетной записью MSA.
Следующий код не вызывает исключение при получении токена доступа к Azure.Хранилище ключей:
var tokenProvider = new
Microsoft.Azure.Services.AppAuthentication.AzureServiceTokenProvider();
var token = await tokenProvider.GetAccessTokenAsync(resource);
return token;
Этот код вызывает исключение, когда я пытаюсь разрешить определенный ключ шифрования из хранилища:
var keyEncryptionKey = await cloudResolver.ResolveKeyAsync(keyId, CancellationToken.None)
Выдается исключение:
Microsoft.Azure.KeyVault.Models.KeyVaultErrorException: Operation returned an invalid status code 'Unauthorized'
at Microsoft.Azure.KeyVault.KeyVaultClient.GetKeyWithHttpMessagesAsync(String vaultBaseUrl, String keyName, String keyVersion, Dictionary`2 customHeaders, CancellationToken cancellationToken)
at Microsoft.Azure.KeyVault.KeyVaultClientExtensions.GetKeyAsync(IKeyVaultClient operations, String keyIdentifier, CancellationToken cancellationToken)
Я бы хотел иметь возможность развернуть решение с использованием MSI для аутентификации, поэтому нам не нужно создавать приложение Active Directory, которое действует как посредник между службой приложений и хранилищем ключей.В конечном итоге нам приходится вводить идентификатор приложения и секретный ключ приложения в конфигурацию службы приложения, и с помощью MSI мы избавляемся от необходимости управлять этими двумя дополнительными битами конфиденциальных данных.
Заранее благодарим за любые ваши предложения.
ОБНОВЛЕНИЕ
Я подтвердил, что если я использую хранилище ключей, которое является частью подписки, связанной с моей корпоративной учетной записью AAD, аутентификация MSI от VS работает правильно безисключение.Должно быть что-то не так с моей конфигурацией.У кого-нибудь еще есть эта проблема с их преимуществами Azure для Microsoft Partner Network Visual Studio Enterprise?Управление идентификацией с MS - это MesS: (