Управление приложением Microsoft Entra с помощью Microsoft Graph

Приложение должно быть зарегистрировано в Microsoft Entra ID, прежде чем платформа удостоверений Майкрософт сможет авторизовать его для доступа к данным, хранящимся в клиентах Microsoft Entra или Microsoft 365. Это условие применяется к приложениям, которые вы разрабатываете самостоятельно, которые принадлежат вашему клиенту или к которым вы обращаетесь через активную подписку.

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

Предварительные условия

Для тестирования операций API требуются следующие ресурсы и привилегии:

  • Рабочий клиент Microsoft Entra.
  • Войдите в Graph Обозреватель как пользователь с правами, разрешенными для создания приложений в клиенте и управления ими.
  • Предоставьте себе наименьшее делегированное разрешение, указанное для операции.

Регистрация приложения с помощью Microsoft Entra ID

Следующий запрос создает приложение, указывая только обязательное свойство displayName .

Разрешение с наименьшими привилегиями: Application.ReadWrite.All.

POST https://graph.microsoft.com/v1.0/applications
Content-type: application/json

{
  "displayName": "My application"
}

Запрос возвращает 201 Created ответ с объектом приложения в тексте отклика. Приложению назначается идентификатор, уникальный для приложений в клиенте, и идентификатор appId, который является глобально уникальным в экосистеме Microsoft Entra ID.

Create субъекта-службы для приложения

Разрешение с наименьшими привилегиями: Application.ReadWrite.All.

POST https://graph.microsoft.com/v1.0/servicePrincipals
Content-type: application/json

{
  "appId": "fc876dd1-6bcb-4304-b9b6-18ddf1526b62"
}

Запрос возвращает 201 Created ответ с объектом субъекта-службы в тексте ответа.

Обращение к приложению или объекту субъекта-службы

Вы можете обратиться к приложению или субъекту-службе по его идентификатору или идентификатору appId, где идентификатор называется идентификатором объекта, а appIdидентификатором приложения (клиента) на Центр администрирования Microsoft Entra. Эти синтаксисы поддерживаются для всех операций CRUD HTTP для приложений и субъектов-служб.

Обращение к приложению или субъекту-службе по его идентификатору.

https://graph.microsoft.com/v1.0/applications/{applicationObjectId}
https://graph.microsoft.com/v1.0/servicePrincipals/{servicePrincipalObjectId}

Обращение к приложению или субъекту-службе с помощью идентификатора appId.

https://graph.microsoft.com/v1.0/applications(appId='appId')
https://graph.microsoft.com/v1.0/servicePrincipals(appId='appId')

Настройка других базовых свойств для приложения

Разрешение с наименьшими привилегиями: Application.ReadWrite.All.

Вы настраиваете следующие основные свойства для приложения.

  • Добавьте теги для классификации в организации. Кроме того, используйте HideApp тег для скрытия приложения от Мои приложения и средства запуска Microsoft 365.
  • Добавьте основную информацию, включая логотип, условия предоставления услуг и заявление о конфиденциальности.
  • Хранение контактных данных о приложении
PATCH https://graph.microsoft.com/v1.0/applications/0d0021e2-eaab-4b9f-a5ad-38c55337d63e/
Content-type: application/json

{
    "tags": [
        "HR",
        "Payroll",
        "HideApp"
    ],
    "info": {
        "logoUrl": "https://cdn.pixabay.com/photo/2016/03/21/23/25/link-1271843_1280.png",
        "marketingUrl": "https://www.contoso.com/app/marketing",
        "privacyStatementUrl": "https://www.contoso.com/app/privacy",
        "supportUrl": "https://www.contoso.com/app/support",
        "termsOfServiceUrl": "https://www.contoso.com/app/termsofservice"
    },
    "web": {
        "homePageUrl": "https://www.contoso.com/",
        "logoutUrl": "https://www.contoso.com/frontchannel_logout",
        "redirectUris": [
            "https://localhost"
        ]
    },
    "serviceManagementReference": "Owners aliases: Finance @ contosofinance@contoso.com; The Phone Company HR consulting @ hronsite@thephone-company.com;"
}

Ограничение входа в приложение только назначенными удостоверениями

Разрешение с наименьшими привилегиями: Application.ReadWrite.All.

PATCH https://graph.microsoft.com/v1.0/servicePrincipals/89473e09-0737-41a1-a0c3-1418d6908bcd

{
    "appRoleAssignmentRequired": true
}

Назначение разрешений приложению

Хотя вы можете назначить разрешения приложению с помощью Центр администрирования Microsoft Entra, вы также можете назначить разрешения через Microsoft Graph, обновив свойство requiredResourceAccess объекта приложения. Необходимо передать как существующие, так и новые разрешения. Передача только новых разрешений перезаписывает и удаляет существующие разрешения, на которые еще не было предоставлено согласие.

Назначение разрешений не предоставляет их приложению автоматически. По-прежнему необходимо предоставить согласие администратора с помощью Центр администрирования Microsoft Entra. Сведения о предоставлении разрешений без интерактивного согласия см. в статье Предоставление или отзыв разрешений API программным способом.

Разрешение с наименьшими привилегиями: Application.ReadWrite.All.

PATCH https://graph.microsoft.com/v1.0/applications/581088ba-83c5-4975-b8af-11d2d7a76e98
Content-Type: application/json

{
    "requiredResourceAccess": [
        {
            "resourceAppId": "00000002-0000-0000-c000-000000000000",
            "resourceAccess": [
                {
                    "id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6",
                    "type": "Scope"
                },
                {
                    "id": "3afa6a7d-9b1a-42eb-948e-1650a849e176",
                    "type": "Role"
                }
            ]
        }
    ]
}

Create роли приложения

Create роли приложения в объекте приложения

Чтобы сохранить все существующие роли приложения, включите их в запрос. В противном случае они заменяются новым объектом .

PATCH https://graph.microsoft.com/v1.0/applications/bbd46130-e957-4c38-a116-d4d02afd1057
Content-Type: application/json

{
    "appRoles": [
        {
            "allowedMemberTypes": [
                "User",
                "Application"
            ],
            "description": "Survey.Read",
            "displayName": "Survey.Read",
            "id": "7a9ddfc4-cc8a-48ea-8275-8ecbffffd5a0",
            "isEnabled": false,
            "origin": "Application",
            "value": "Survey.Read"
        }
    ]
}

Управление владельцами

Определение бесхозяйных субъектов-служб и субъектов-служб с одним владельцем

Разрешение с наименьшими привилегиями: Application.ReadWrite.All.

Для этого запроса требуется заголовок ConsistencyLevel с присвоенным значением eventual, так как в запросе присутствует $count. Дополнительные сведения об использовании ConsistencyLevel и $countсм. в разделе Дополнительные возможности запросов к объектам каталога.

Этот запрос также возвращает количество приложений, соответствующих условию фильтра.

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=owners/$count eq 0 or owners/$count eq 1&$count=true
ConsistencyLevel: eventual

Назначение владельца приложению

Разрешение с наименьшими привилегиями: Application.ReadWrite.All.

В следующем запросе 8afc02cb-4d62-4dba-b536-9f6d73e9be26 — это идентификатор объекта для пользователя или субъекта-службы.

POST https://graph.microsoft.com/v1.0/applications/7b45cf6d-9083-4eb2-92c4-a7e090f1fc40/owners/$ref
Content-Type: application/json

{
    "@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/8afc02cb-4d62-4dba-b536-9f6d73e9be26"
}

Назначение владельца субъекту-службе

Разрешение с наименьшими привилегиями: Application.ReadWrite.All.

Следующий запрос ссылается на субъект-службу, используя его appId. 8afc02cb-4d62-4dba-b536-9f6d73e9be26 — это идентификатор объекта для пользователя или субъекта-службы.

POST https://graph.microsoft.com/v1.0/servicePrincipals(appId='46e6adf4-a9cf-4b60-9390-0ba6fb00bf6b')/owners/$ref
Content-Type: application/json

{
    "@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/8afc02cb-4d62-4dba-b536-9f6d73e9be26"
}

Блокировка конфиденциальных свойств для субъектов-служб

Функция блокировки экземпляра приложения позволяет защитить конфиденциальные свойства мультитенантных приложений от несанкционированного изменения. Следующие свойства объекта субъекта-службы можно заблокировать:

  • keyCredentials, где тип использования имеет значение Sign или Verify.
  • passwordCredentials, где тип использования имеет значение Sign или Verify.
  • свойство tokenEncryptionKeyId .

Вы управляете функцией блокировки экземпляра приложения с помощью свойства servicePrincipalLockConfiguration объекта приложения мультитенантного приложения.

Блокировка всех конфиденциальных свойств субъекта-службы

Если значение isEnabled и allProperties имеет значение true, даже если другие свойства объекта servicePrincipalLockConfiguration имеют nullзначение , все конфиденциальные свойства субъекта-службы блокируются.

PATCH https://graph.microsoft.com/beta/applications/a0b7f39e-3139-48aa-9397-f46fb63102f7

{
    "servicePrincipalLockConfiguration": {
        "isEnabled": true,
        "allProperties": true
    }
}

Блокировка определенных конфиденциальных свойств субъекта-службы

В следующем примере свойства keyCredentials и passwordCredentials субъекта-службы блокируются и включается функция блокировки экземпляра приложения.

PATCH https://graph.microsoft.com/beta/applications/a0b7f39e-3139-48aa-9397-f46fb63102f7

{
    "servicePrincipalLockConfiguration": {
        "isEnabled": true,
        "credentialsWithUsageSign": true,
        "credentialsWithUsageVerify": true
    }
}