Как получить токен для идентификатора, управляемого Azure, через интерфейс REST?

Этот вопрос относится к статье:

https://docs.microsoft.com/en-us/azure/app-service/app-service-managed-service-identity

Я пытаюсь выяснить, как я могу имитировать, используя субъект-службу, который генерируется для моего приложения Azure для локальной работы.

Я следовал за статьей, и когда я развернул функцию Azure в Azure и запустил ее оттуда, я смог успешно использовать MSI_ENDPOINT и MSI_SECRET для успешного получения токена. Однако, когда я запускаю то же самое развертывание локально, это терпит неудачу. Я использую точно такой же MSI_SECRET и заменяю MSI_ENDPOINT на Домен, который я использую на конечную точку функции Azure.

Пример: на лазере MSI_ENDPOINT = http://127.0.0.1:41831/ и локально это http://localhost:7071/ ( http://0.0.0.0:7071/

Однако, когда я запускаю его локально, я получаю ошибку 404 с запросом. Запрос http://0.0.0.0:7071/MSI/token?resource=https://vault.azure.net&api-version=2017-09-01 с секретом в заголовке. Точно такие же параметры с рабочим параметром, загруженным на лазурь, за исключением MSI_ENDPOINT.

Любой совет, как решить эту проблему, чтобы я мог запускать и тестировать локально?

Используя библиотеку Microsoft.Azure.Services.AppAuthentication для приложений и функций.NET для.NET, самый простой способ работы с управляемой идентификацией - через пакет Microsoft.Azure.Services.AppAuthentication. Эта библиотека также позволит вам тестировать свой код локально на компьютере разработчика, используя учетную запись пользователя из Visual Studio, интерфейс командной строки Azure или встроенную проверку подлинности Active Directory. Дополнительные сведения о локальных вариантах разработки с этой библиотекой см. В справочнике Microsoft.Azure.Services.AppAuthentication. В этом разделе показано, как начать работу с библиотекой в ​​вашем коде. Добавьте ссылки на пакеты Microsoft.Azure.Services.AppAuthentication и Microsoft.Azure.KeyVault NuGet в свое приложение.

Тем не менее, эта библиотека доступна только в.net, который я не использую, и на самом деле не объясняет, как бы вы сделали это с помощью вызова REST.

Спасибо!

1 ответ

Насколько я понимаю, MSI через REST работает у вас в облаке, но не локально.

К сожалению, кажется, что в настоящее время это нелегко сделать, если вы не можете использовать библиотеку AppAuthentication. Смотрите это предложение GitHub.

Поэтому, если вы не хотите взламывать какой-либо код отладки в своем производственном коде, вам, вероятно, нужно локально разместить "собственный прокси-сервер MSI", который просто выполняет классическую аутентификацию через учетные данные клиента (appId + secret) для возврата токена.

curl -d "grant_type=client_credentials&client_id=<removed_for_security>&client_secret=<removed_for_security>&resource=https%3A%2F%2Fvault.azure.net" https://login.microsoftonline.com/<removed_for_security>/oauth2/token

Обратите внимание, что я добавил KeyVault в качестве параметра ресурса. Смотрите ваш встроенный MSI URL - http://0.0.0.0:7071/MSI/token?resource=https://vault.azure.net&api-version=2017-09-01

Другие вопросы по тегам