Аутентификация для Azure REST API без входа в систему - PullRequest
1 голос
/ 05 февраля 2020

У меня есть бэкэнд-процесс, который напрямую не взаимодействует с пользователем. Я хочу получить доступ к резервированию, связанному с моей учетной записью Azure, но у меня возникли проблемы с этапом аутентификации. Я следовал руководству здесь , и мне удалось заставить запрос аутентификации работать, вызвав

https://login.microsoftonline.com/{tenant-ID}/oauth2/token

как POST со следующим x- www-form-urlencoded body:

grant_type=client_credentials&
client_id={client-ID}&
client_secret={client-Secret}&
resource=http://myapp42

Однако, когда я пытаюсь позвонить:

https://management.azure.com/providers/Microsoft.Capacity/reservationOrders/{order-ID}/reservations/{reservation-ID}?api-version=2019-04-01

с токеном носителя, который я получил во время шага аутентификации, я получаю следующее сообщение об ошибке:

токен доступа был получен для неверной аудитории или ресурса 'http://myapp42'. Он должен точно соответствовать одной из разрешенных аудиторий: 'https://management.core.windows.net/', 'https://management.core.windows.net', 'https://management.azure.com/', ' https://management.azure.com '

Однако, если я изменю ресурс по запросу на один из них, например, http://management.core.windows.net/, аутентификация завершится неудачно:

AADSTS500011: участник ресурса с именем https% 3A% 2F% 2Fmanagement.core. windows .net% 2F не найден в клиенте с именем {tenant-ID}. Это может произойти, если приложение не было установлено администратором клиента или не было одобрено каким-либо пользователем в клиенте. Возможно, вы отправили запрос проверки подлинности не тому арендатору. \ R \ nTrace ID: b54cedea-3804-41cf-bd27-fcf0ed1c4700 \ r \ nКорреляционный идентификатор: 2371d375-6c89-4f05-83c9-c4629b3340a8 \ r \ nВременная отметка: 2020-02 -05 01: 59: 57Z

Как мне пройти аутентификацию, чтобы я мог получить свое бронирование без входа в систему?

Обновление: Принципал службы назначены роли как владельца, так и участника.

обновление 2: Благодаря @Jim Xu я понял, что должен воздерживаться от URL-кодирования URL-адреса. Это позволило мне получить токен доступа со значением https://management.azure.com/ для поля resource. Однако в этот момент, когда я пытаюсь вызвать REST API с помощью полученного токена на предъявителя, я получаю следующую ошибку:

Клиент '{Object-ID}' с идентификатором объекта '{Object -ID} 'не имеет полномочий для выполнения действия' Microsoft.Capacity /servationOrders / reservations / read 'over scope' /providers/Microsoft.Capacity/reservationOrders/ndomorder-ID‹/reservations/advanreservation-ID} 'или область действия недействительна Если доступ был недавно предоставлен, обновите sh свои учетные данные

Примечание. Идентификатор объекта, возвращаемый этой ошибкой, является идентификатором, связанным с субъектом службы.

Обновление 3: Я проверил резервирование, и кажется, что принципал не играет роли в управлении доступом этого резервирования. Однако я также не могу назначить принципалу роль, поскольку она не отображается при поиске принципалов во время процесса назначения ролей.

1 Ответ

3 голосов
/ 05 февраля 2020

Если вы хотите позвонить на Azure Rest API, чтобы получить информацию о заказах на резервирование, вам нужно назначить владельца \ участника для участника службы (для действия требуется разрешение Microsoft.Capacity/reservationOrders/read).

следующие шаги

  1. Получить токен доступа
POST : https://login.microsoftonline.com/{tenant-ID}/oauth2/token
Content-Type: application/x-www-form-urlencoded

grant_type=client_credentials&
client_id={client-ID}&
client_secret={client-Secret}&
resource=https://management.azure.com/ or https://management.core.windows.net

enter image description here

Позвоните в API
GET : https://management.azure.com/providers/Microsoft.Capacity/reservationOrders/{order-ID}/reservations/{reservation-ID}?api-version=2019-04-01
Authorization: Bearer <token>

Для получения более подробной информации, пожалуйста, обратитесь к выпуску и выпуску


update

Если вам назначена роль, но вы все еще не можете получить токен доступа, попробуйте закодировать ваш URL.

...