Добавление приложений программно в Azure AD с использованием потока учетных данных клиента

Для использования с управлением API Azure я пытаюсь добавитьПриложения в Azure Active Directory (AAD) программно, в моем случае с помощью Graph API.

Мой сценарий следующий: для защиты веб-API, которым я хочу управлять с помощью Azure API Management, я хочу использовать функциональные возможности AAD OAuth для выполнения тяжелой работы в отношении аутентификации и выдачи токенов JWT, а затем просто использовать политику validate-jwt чтобы убедиться, что все в порядке в Azure API Management. Это имеет то преимущество, что я могу более или менее пропустить аутентификацию в своем бэкэнд-сервисе.

Это работает нормально, пока я создал приложение в Azure AD для потребляющего веб-приложения, но это нужно сделать вручную на портале Azure; Azure APIm не делает это автоматически.

Теперь для того, что я пытаюсь сделать, чтобы сделать это автоматически: я хотел делегировать подписку на API в APIm другому веб-приложению, которое я пишу, и оттуда я хочу использовать Graph API для создания приложения в Azure. AD и предоставить разрешения на применение API.

Первое, что я попытался сделать, - это иметь третье приложение (мое служебное приложение), которое должно иметь полные разрешения для приложения Windows Azure Active Directory в Azure AD; это позволяет моему приложению получать доступ к AAD с помощью API Graph REST. Мне удается получить токен доступа с помощью гранта client_credentials (от login.microsoft.com), но этот токен не позволяет мне сделатьPOST наhttps://graph.windows.net/(my AAD ID)/applications?api-version=1.5:

    {
        "odata.error": {
            "code": "Authorization_RequestDenied",
            "message": {
                "lang": "en",
                "value": "Insufficient privileges to complete the operation."
            }
        }
    }

Я нашел (https://msdn.microsoft.com/Library/Azure/Ad/Graph/howto/azure-ad-graph-api-permission-scopes) что даже если я предоставлюDirectory.ReadWrite.All Разрешение, приложение (только для приложений) не сможет создавать или обновлять приложения:

Заметка: Специально исключает создание или обновление для объектов, не перечисленных выше. Это включает в себя: приложение, Oauth2PermissionGrant, AppRoleAssignment, устройство, ServicePrincipal, TenantDetail, домены и т. Д.

Следующее, что я попробовал, было предоставление пароля владельца ресурса (grant_type=password), дополнительно передавая свои собственные учетные данные, чтобы я мог выдать себя за себя в Graph API. Теперь мойPOST кapplications конечная точка успешна.

Мой основной вопрос: могу ли я предоставить достаточные разрешения своему приложению, чтобы я мог добавлять приложения программно, используя поток учетных данных клиента, а не какой-либо поток, действующий от имени пользователя? И если так, как это делается?

Ответы на вопрос(1)

Ваш ответ на вопрос