Проверка подлинности MSI в хранилище ключей Azure не работает локально с VS 2017 и IISExpress - PullRequest
0 голосов
/ 24 сентября 2018

Я реализовал решение, использующее хранилище ключей 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: (

Ответы [ 2 ]

0 голосов
/ 06 декабря 2018

Локальная разработка в Visual Studio с использованием службы хранилища ключей Azure зависит от «Расширения проверки подлинности служб Azure» https://marketplace.visualstudio.com/items?itemName=chrismann.MicrosoftVisualStudioAsalExtension#overview, которое интегрировано в Visual Studio начиная с версии 15.6 и не требует отдельной установки.

Проверьте Visual Studio / Инструменты / Параметры / Аутентификация служб Azure, чтобы увидеть, какую учетную запись вы используете для аутентификации в службах Azure, и установите соответствующую.

Кроме того, в приложении установите пакет NuGet Microsoft.Azure.Services.AppAuthentication.

0 голосов
/ 24 сентября 2018

Возможно, вы пропустили этот шаг, чтобы предоставить доступ к своей учетной записи.Пожалуйста, ознакомьтесь с этой статьей для подробного просмотра -

Использование хранилища ключей из службы приложений с идентификатором управляемой службы

enter image description here

ОБНОВЛЕНИЕ

Как обсуждалось в комментариях ниже, помимо доступа к секретному управлению для доступа к хранилищу ключей, убедитесь, что вы дали как минимум разрешение «GET» в разделе «Ключ».«Операции управления», поскольку ваша трассировка стека ошибок показывает проблему при выполнении метода GetKeyAsync.Обратите внимание, что вам могут понадобиться дополнительные разрешения помимо «GET», относящиеся к ключевым операциям, просто на случай, если ваш код выполняет что-то дополнительное, например, перечисление ключей или создание, обновление, удаление и т. Д.

at Microsoft.Azure.KeyVault.KeyVaultClientExtensions.GetKeyAsync(IKeyVaultClient operations, String keyIdentifier, CancellationToken cancellationToken)

enter image description here

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...