Может ли участник службы (мультитенант приложения Azure) дать согласие администратора на приложение в клиенте, использующем AZ CLI? - PullRequest
4 голосов
/ 29 октября 2019

Контекст

Мы используем несколько каталогов ( TENANT_A , TENANT_B ) в Azure. Цель состоит в том, чтобы создать субъект-службу (Приложение), _SP_APP , внутри TENANT_A , которому предоставляется доступ к TENANT_B . Мы хотим использовать этого участника службы в скрипте, чтобы легко управлять обоими каталогами. Один из сценариев заключается в создании новой регистрации приложения внутри TENANT_B AND и предоставлении ADMIN CONSENT для этих приложений.

Что сделано

_SP_APP

  • Глобальный администратор в обоих каталогах
  • Предоставлен доступ к TENANT_B (Доступен в корпоративном приложении)
  • Разрешения API предоставлены Согласие администратора ( TENANT_A и TENANT_B )
    • Microsoft Graph (делегированный и полный доступ к приложению)
    • Azure Active Directory Graph (делегированный и полный доступ к приложению)

Шаги

Работает правильно

# Login with service principal of multiple tenants application
az login --service-principal -u _SP_APP -p <PASSWORD> --tenant TENANT_B
# Creating application and fetching ID
_OBJECT_ID=`az ad app create ...` 

Не работает

# Granting Admin Consent
az ad app permission admin-consent --id $_OBJECT_ID
# ERROR
Bad Request({"ClassName":"Microsoft.Portal.Framework.Exceptions.ClientException","Message":"AADSTS50058: A silent sign-in request was sent but no user is signed in.\r\nTrace ID: 9c9bd004-a97a-4543-8ff0-e314de77a700\r\nCorrelation ID: 44c79409-2f3e-43de-a84b-1e5a42e382e7\r\nTimestamp: 2019-10-28 15:54:20Z" ...

Что странно, когда мы az loginс глобальным пользователем-администратором и запустите сценарий, он работает нормально.

Вопрос

Мы что-то упустили, чтобы дать возможность этому принципалу службы предоставлять согласие администратора или это только что-то "пользователь "может сделать? (Я не нашел ответа в документации Microsoft Azure).

Спасибо

1 Ответ

1 голос
/ 30 октября 2019

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

Если для этого необходимо использовать субъект обслуживания, вы можете использовать Microsoft Graph API. Он автоматически разрешит разрешения.

POST https://graph.microsoft.com/beta/xx.onmicrosoft.com/oauth2PermissionGrants

{
  "clientId": "clientId-value",
  "consentType": "consentType-value",
  "expiryTime": "2016-10-19T10:37:00Z",
  "id": "id-value",
  "principalId": "principalId-value",
  "resourceId": "resourceId-value"
}

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

...