Получение токена доступа для веб-приложения с поддержкой MSI

У меня есть проект веб-API, размещенный в Azure как веб-приложение с включенным удостоверением управляемой службы (так что мне не нужна регистрация приложения, верно?):

введите здесь описание изображения

Теперь мне нужно получить токен для доступа к моему API, чтобы я мог использовать его в POSTMAN:

az login
az account get-access-token --resource "https://mytenant.onmicrosoft.com/d3a219e0-bbbf-496b-a4a4-b9ca485c5a52"

что дает мне

Запрос на получение токена вернул ошибку http: 400 и ответ сервера: {"error": "invalid_resource", "error_description": "AADSTS50001: приложение с именем https://mytenant.onmicrosoft.com/d3a219e0-bbbf-496b-a4a4-b9ca485c5a52 не найден в клиенте с именем xxxxxxxx-xxxx-xxxx-xxxx -xxxxxxxxxx. Это может произойти, если приложение не было установлено администратором клиента или с согласия какого-либо пользователя в клиенте. Возможно, вы отправили запрос аутентификации не тому клиенту.

Я получаю ту же ошибку, если пытаюсь использовать идентификатор объекта 63d571cf-79bf-405d-8304-a31fb64cb953 вместо идентификатора приложения как часть ресурса uri.

Что я делаю неправильно?


person UserControl    schedule 15.08.2018    source источник


Ответы (2)


Что я делаю неправильно?

az account get-access-token используется для получения токена для доступа к Azure resource. Мы могли бы получить дополнительную информацию из этого документ.

--ресурс

Конечные точки ресурсов Azure. По умолчанию используется диспетчер ресурсов Azure. Используйте команду az cloud show для других ресурсов Azure.

Ресурс должен находиться в следующих конечных точках. И ресурс по умолчанию - https://management.azure.com/

 "endpoints": {
    "activeDirectory": "https://login.microsoftonline.com",
    "activeDirectoryDataLakeResourceId": "https://datalake.azure.net/",
    "activeDirectoryGraphResourceId": "https://graph.windows.net/",
    "activeDirectoryResourceId": "https://management.core.windows.net/",
    "batchResourceId": "https://batch.core.windows.net/",
    "gallery": "https://gallery.azure.com/",
    "management": "https://management.core.windows.net/",
    "resourceManager": "https://management.azure.com/",
    "sqlManagement": "https://management.core.windows.net:8443/",
    "vmImageAliasDoc": "https://raw.githubusercontent.com/Azure/azure-rest-api-specs/master/arm-compute/quickstart-templates/aliases.json"
  }

Насколько я понимаю, команда не связана с вашим доступом к API.

Дополнительные сведения о MSI и о том, как защитить API с помощью OAuth 2.0 с Azure Active Directory, см. В этом руководство и этот руководство.

person Tom Sun - MSFT    schedule 16.08.2018
comment
Я действительно не понимаю. az account get-access-token не работает, если я указываю https://login.microsoftonline.com из списка конечных точек, но отлично работает с https://database.windows.net/, которого нет в списке (я помню, что использовал такие токены для доступа к базе данных SQL, передав его SqlConnection.AccessToken). Почему получение токена для доступа к моему API как-то иначе? - person UserControl; 16.08.2018
comment
Учетная запись az get access-token используется для получения токена для доступа к Azure resouce (конечная точка ресурса Azure) и ресурсу Azure, который защищен сервером идентификации Azure. Если вы используете JWT.IO для проверки токена, вы можете знать token audience. Если вы хотите получить доступ к пользовательскому API, ваша аудитория должна использовать сервер идентификации, если он у вас есть. Также это зависит от того, как защитить ваш WebAPi. - person Tom Sun - MSFT; 16.08.2018

URI ресурса не содержит ни вашего идентификатора приложения, ни идентификатора объекта. Это отдельный идентификатор, который можно найти в свойствах регистрации приложения в разделе URI идентификатора приложения.

А поскольку это субъект-служба, созданная MSI, приложения нет. Думаю, в этом случае вам нужно зарегистрировать приложение.

person juunas    schedule 15.08.2018
comment
У меня нет регистрации для моего веб-приложения. Я думал, что одним из преимуществ MSI является то, что вам не нужно добавлять регистрации приложений (это как лишнее трение). Насколько я понимаю, любой пользователь, добавленный в приложение в колонке Enterprise application, может получить доступ к приложению, если у него есть токен. Я что-то упустил? Могу ли я получить URI идентификатора приложения для MSI без создания регистрации приложения? - person UserControl; 15.08.2018
comment
Ах, я слишком быстро прочитал твой вопрос. Поскольку нет регистрации приложения, другое приложение не может получить для него токен. В этом случае вам необходимо зарегистрировать приложение. - person juunas; 15.08.2018
comment
спасибо, я думаю, я понял. Однако тогда я не понимаю, что пользователи и группы должны делать для корпоративного приложения. - person UserControl; 15.08.2018
comment
Ах, ну, вы можете контролировать доступ пользователей к приложению через принципала службы. Хотя я думаю, что на самом деле нет смысла использовать это с принципалом MSI. - person juunas; 15.08.2018