Поделиться через


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

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

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

  • Чтобы протестировать операции API, войдите в 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.

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

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

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

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

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

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

Ссылка на приложение или субъект-службу по его идентификатору. Этот синтаксис поддерживает методы HTTP GET, PATCH и DELETE.

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

Ссылка на приложение или субъект-службу по его appId. Этот синтаксис поддерживает методы HTTP GET, PATCH и DELETE.

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

Адрес объекта приложения по его uniqueName с помощью метода PATCH. Используйте это свойство, чтобы создать приложение с уникальным именем, если оно не существует, или обновить его, если оно существует. Эта операция называется Upsert.

PATCH https://graph.microsoft.com/v1.0/applications(uniqueName='{uniqueName}')
Content-Type: application/json
Prefer: create-if-missing

{
  "displayName": "Display name"
}

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

Делегированное разрешение с наименьшими привилегиями: 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.contoso.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 @ [email protected]; The Phone Company HR consulting @ [email protected];"
}

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

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

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

{
    "appRoleAssignmentRequired": true
}

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

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

Назначение разрешений не предоставляет их. Предоставление согласия администратора в Центр администрирования Microsoft Entra или программно с помощью API Microsoft Graph.

Делегированное разрешение с наименьшими привилегиями: 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"
        }
      ]
    }
  ]
}

Создание ролей приложения

Создание ролей приложения в объекте приложения

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

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. Вы также можете ссылаться на него с помощью идентификатора объекта в шаблоне ../servicePrincipals/{object ID}/owners/$ref. dddddddd-9999-0000-1111-eeeeeeeeeeee — это идентификатор объекта для пользователя или субъекта-службы.

POST https://graph.microsoft.com/v1.0/servicePrincipals(appId='00001111-aaaa-2222-bbbb-3333cccc4444')/owners/$ref
Content-Type: application/json

{
    "@odata.id": "https://graph.microsoft.com/v1.0/directoryObjects/dddddddd-9999-0000-1111-eeeeeeeeeeee"
}

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

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

  • 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
    }
}

Настройка доверенных центров сертификации для приложений

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

Шаг 1. Создание цепочки доверия сертификатов

Делегированные разрешения с наименьшими привилегиями: AppCertTrustConfiguration.Read.All роль Microsoft Entra с наименьшими привилегиями:Application Administrator

POST https://graph.microsoft.com/beta/certificateAuthorities/certificateBasedApplicationConfigurations

{
    "displayName": "Trusted Certificate Chain of Trust for Contoso",
    "description": "The Trusted Certificate Chain of Trust containing a certificate chain used by app policy, to only allow application certificates from selected issuer.",
    "trustedCertificateAuthorities": [
        {
            "isRootAuthority": true,
            "certificate": "MIIFVjCCAz6gAwIBAgIQJdrL...UyNDIyNTcwM1owPDE …="
        },
        {
            "isRootAuthority": false,
            "certificate": QAAAAAAWjABAQsFADA8M...UyNDIyNTcwM1o …="
        }
    ]
}

Запрос возвращает объект отклика 200 OK. Ответ включает идентификатор цепочки сертификатов объекта доверия. Предположим, что идентификатор используется eec5ba11-2fc0-4113-83a2-ed986ed13743 на шаге 2.

Шаг 2. Назначение цепочки сертификатов доверия политике управления приложениями

В следующем примере настраивается политика, гарантирующая, что в приложения в клиенте можно добавлять только сертификаты, выданные промежуточным центром сертификации, определенным на предыдущем шаге. ОбъектkeyCredentialsapplicationRestrictions> определяет свойство restrictionType со значением trustedCertificateAuthority, которое ссылается на созданный идентификатор. Так как эта политика применяется к политике управления приложениями на уровне клиента по умолчанию, она применяется ко всем приложениям, созданным в клиенте, и отклоняет попытки добавления несоответствующих сертификатов в составе учетных данных сертификата приложения.

Эта политика гарантирует, что в приложения можно добавлять только сертификаты из указанного промежуточного центра сертификации. Объект applicationRestrictions>keyCredentials задает для параметра restrictionTypetrustedCertificateAuthorityзначение , ссылающееся на созданный идентификатор. Эта политика применяется ко всем приложениям в клиенте, отклоняя все несоответствующие сертификаты.

Делегированные разрешения с наименьшими привилегиями: Policy.Read.ApplicationConfiguration роль Microsoft Entra с наименьшими привилегиями:Security Administrator

PATCH https://graph.microsoft.com/v1.0/policies/defaultAppManagementPolicy

{
  "id": "d015220e-9789-4e8e-bbcc-270fe419229d",
  "description": "Lorem ipsum",
  "displayName": "Credential management policy",
  "isEnabled": true,
  "applicationRestrictions": {
    "passwordCredentials": [
      {
        "restrictionType": "passwordLifetime",
        "maxLifetime": "P14D",
        "restrictForAppsCreatedAfterDateTime": "2020-01-01T07:00:00Z"
      }
    ],
    "keyCredentials": [
      {
        "restrictionType": "certificateLifetime",
        "restrictForAppsCreatedAfterDateTime": "2020-01-01T10:37:00Z",
        "maxLifetime": "P90D"
      },
      {
        "restrictionType": "trustedCertificateAuthority",
        "certificateBasedApplicationConfigurationIds": [
          "eec5ba11-2fc0-4113-83a2-ed986ed13743"
        ],
        "restrictForAppsCreatedAfterDateTime": "2019-10-19T10:37:00Z"
      }
    ]
  }
}