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


Предоставление или отзыв разрешений API программным способом

Когда вы предоставляете разрешения API клиентскому приложению в Microsoft Entra ID, предоставленные разрешения записываются как объекты, к которым можно получить доступ, обновить или удалить, как к вашим данным. Использование Microsoft Graph для прямого создания разрешений является программной альтернативой интерактивному согласию и может быть полезно для сценариев автоматизации, массового управления или других пользовательских операций в организации.

В этом руководстве вы узнаете, как предоставлять и отзывать роли приложения для приложения с помощью Microsoft Graph. Роли приложения, также называемые разрешениями приложения или разрешениями прямого доступа, позволяют приложению вызывать API с собственным удостоверением.

Предостережение

Будьте осторожны! Разрешения, предоставляемые программным способом, не подлежат проверке или подтверждению. Они вступают в силу немедленно.

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

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

  • Рабочий клиент Microsoft Entra.
  • Запросы, приведенные в этой статье, будут выполняться от имени пользователя. Необходимо выполнить следующие действия.
    • Войдите в клиент API, например Graph Обозреватель как пользователь с правами на создание приложений в клиенте.
    • В приложении, в которое вы выполнили вход, даете согласие на делегированные разрешения Application.Read.All и AppRoleAssignment.ReadWrite.All от имени вошедшего пользователя. Вам не нужно давать согласие от имени вашей организации.
    • Получите идентификатор объекта субъекта-службы клиента, которому будут предоставлены роли приложения. В этой статье субъект-служба клиента определяется по идентификатору b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94. В Центр администрирования Microsoft Entra перейдите в разделПриложения>удостоверений>Корпоративные приложения>Приложения, чтобы найти субъект-службу клиента. Выберите его и на странице Обзор скопируйте значение Идентификатор объекта.

Предостережение

К приложениям, которым предоставлено разрешение AppRoleAssignment.ReadWrite.All , должны обращаться только соответствующие пользователи.

Шаг 1. Получение объектов appRoles субъекта-службы ресурса

Перед предоставлением ролей приложения необходимо сначала определить роли приложения, которые необходимо предоставить, и субъект-служба ресурса, который предоставляет роли приложения. Роли приложения определяются в объекте appRoles субъекта-службы. В этой статье вы будете использовать субъект-службу Microsoft Graph в клиенте в качестве субъекта-службы ресурсов.

Запрос

Следующий запрос извлекает роли приложения, определенные субъектом-службой Microsoft Graph в клиенте.

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq 'Microsoft Graph'&$select=id,displayName,appId,appRoles

Отклик

Следующий объект является примером ответа.

Примечание. Объект отклика, показанный здесь, может быть сокращен для удобочитаемости.

HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#servicePrincipals(id,displayName,appId,appRoles)",
    "value": [
        {
            "id": "7ea9e944-71ce-443d-811c-71e8047b557a",
            "displayName": "Microsoft Graph",
            "appId": "00000003-0000-0000-c000-000000000000",
            "appRoles": [
                {
                    "allowedMemberTypes": [
                        "Application"
                    ],
                    "description": "Allows the app to read user profiles without a signed in user.",
                    "displayName": "Read all users' full profiles",
                    "id": "df021288-bdef-4463-88db-98f22de89214",
                    "isEnabled": true,
                    "origin": "Application",
                    "value": "User.Read.All"
                }
            ]
        }
    ]
}

Шаг 2. Предоставление роли приложения субъекту-службе клиента

На этом шаге вы предоставите приложению роль приложения, предоставляемую Microsoft Graph, тем самым создав назначение роли приложения. На шаге 1 идентификатор объекта Microsoft Graph — и 7ea9e944-71ce-443d-811c-71e8047b557a роль User.Read.All приложения определяется идентификатором df021288-bdef-4463-88db-98f22de89214.

Запрос

Следующий запрос предоставляет клиентскому приложению (субъекту id b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94) роль приложения с идентификатором df021288-bdef-4463-88db-98f22de89214 , который предоставляется субъектом-службой ресурсов с идентификатором 7ea9e944-71ce-443d-811c-71e8047b557a.

Примечание.

Если вы используете пакет SDK для Python, импортируйте следующие библиотеки:

from msgraph.generated.models.app_role_assignment import AppRoleAssignment
from msgraph.generated.models.service_principal import ServicePrincipal
POST https://graph.microsoft.com/v1.0/servicePrincipals/7ea9e944-71ce-443d-811c-71e8047b557a/appRoleAssignedTo
Content-Type: application/json

{
    "principalId": "b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94",
    "resourceId": "7ea9e944-71ce-443d-811c-71e8047b557a",
    "appRoleId": "df021288-bdef-4463-88db-98f22de89214"
}

Отклик

HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#servicePrincipals('7ea9e944-71ce-443d-811c-71e8047b557a')/appRoleAssignedTo/$entity",
    "id": "47nZsM8O_UuNq5Jz3QValCxBBiqJea9Drc9CMK4Ru_M",
    "deletedDateTime": null,
    "appRoleId": "df021288-bdef-4463-88db-98f22de89214",
    "createdDateTime": "2022-05-18T15:37:21.8215423Z",
    "principalDisplayName": "My application",
    "principalId": "b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94",
    "principalType": "ServicePrincipal",
    "resourceDisplayName": "Microsoft Graph",
    "resourceId": "7ea9e944-71ce-443d-811c-71e8047b557a"
}

Подтверждение назначения роли приложения

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

Запрос

GET https://graph.microsoft.com/v1.0/servicePrincipals/7ea9e944-71ce-443d-811c-71e8047b557a/appRoleAssignedTo

Отклик

Объект ответа включает коллекцию назначений ролей приложения субъекту-службе ресурсов и назначение роли приложения, созданное с помощью запроса POST.

HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#servicePrincipals('7ea9e944-71ce-443d-811c-71e8047b557a')/appRoleAssignedTo",
    "value": [
        {
            "id": "47nZsM8O_UuNq5Jz3QValCxBBiqJea9Drc9CMK4Ru_M",
            "deletedDateTime": null,
            "appRoleId": "df021288-bdef-4463-88db-98f22de89214",
            "createdDateTime": "2022-05-18T15:37:21.8997216Z",
            "principalDisplayName": "My application",
            "principalId": "b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94",
            "principalType": "ServicePrincipal",
            "resourceDisplayName": "Microsoft Graph",
            "resourceId": "7ea9e944-71ce-443d-811c-71e8047b557a"
        }
    ]
}

Шаг 3. Отзыв назначения роли приложения из субъекта-службы клиента

Запрос

DELETE https://graph.microsoft.com/v1.0/servicePrincipals/7ea9e944-71ce-443d-811c-71e8047b557a/appRoleAssignedTo/47nZsM8O_UuNq5Jz3QValCxBBiqJea9Drc9CMK4Ru_M

Отклик

HTTP/1.1 204 No Content

Заключение

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

В этом руководстве вы узнаете, как предоставлять и отзывать делегированные разрешения для приложения с помощью Microsoft Graph. Делегированные разрешения, также называемые областями или разрешениями OAuth2, позволяют приложению вызывать API от имени пользователя, выполнившего вход.

Предостережение

Будьте осторожны! Разрешения, предоставляемые программным способом, не подлежат проверке или подтверждению. Они вступают в силу немедленно.

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

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

  • Рабочий клиент Microsoft Entra.
  • Запросы, приведенные в этой статье, будут выполняться от имени пользователя. Необходимо выполнить следующие действия.
    • Войдите в клиент API, например Graph Обозреватель как пользователь с правами на создание приложений в клиенте.
    • В приложении, в которое вы выполнили вход, даете согласие на делегированные разрешения Application.Read.All, DelegatedPermissionGrant.ReadWrite.All от имени вошедшего пользователя. Вам не нужно давать согласие от имени вашей организации.
    • Получите идентификатор объекта субъекта-службы клиента, которому будут предоставлены делегированные разрешения от имени пользователя. В этой статье субъект-служба клиента определяется по идентификатору b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94.

Предостережение

К приложениям, которым предоставлено разрешение DelegatedPermissionGrant.ReadWrite.All , должны обращаться только соответствующие пользователи.

Шаг 1. Получение делегированных разрешений субъекта-службы ресурсов

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

Запрос

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

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq 'Microsoft Graph'&$select=id,displayName,appId,oauth2PermissionScopes

Отклик

Следующий объект является примером ответа.

Примечание. Объект отклика, показанный здесь, может быть сокращен для удобочитаемости.

HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#servicePrincipals(id,displayName,appId,oauth2PermissionScopes)",
    "value": [
        {
            "id": "7ea9e944-71ce-443d-811c-71e8047b557a",
            "displayName": "Microsoft Graph",
            "appId": "00000003-0000-0000-c000-000000000000",
            "oauth2PermissionScopes": [
                {
                    "adminConsentDescription": "Allows the app to read the full set of profile properties, reports, and managers of other users in your organization, on behalf of the signed-in user.",
                    "adminConsentDisplayName": "Read all users' full profiles",
                    "id": "a154be20-db9c-4678-8ab7-66f6cc099a59",
                    "isEnabled": true,
                    "type": "Admin",
                    "userConsentDescription": "Allows the app to read the full set of profile properties, reports, and managers of other users in your organization, on your behalf.",
                    "userConsentDisplayName": "Read all users' full profiles",
                    "value": "User.Read.All"
                },
                {
                    "adminConsentDescription": "Allows the app to list groups, and to read their properties and all group memberships on behalf of the signed-in user.  Also allows the app to read calendar, conversations, files, and other group content for all groups the signed-in user can access. ",
                    "adminConsentDisplayName": "Read all groups",
                    "id": "5f8c59db-677d-491f-a6b8-5f174b11ec1d",
                    "isEnabled": true,
                    "type": "Admin",
                    "userConsentDescription": "Allows the app to list groups, and to read their properties and all group memberships on your behalf.  Also allows the app to read calendar, conversations, files, and other group content for all groups you can access.  ",
                    "userConsentDisplayName": "Read all groups",
                    "value": "Group.Read.All"
                }                
            ]
        }
    ]
}

Шаг 2. Предоставление делегированного разрешения субъекту-службе клиента от имени пользователя

Запрос

На этом шаге вы предоставите приложению от имени пользователя делегированное разрешение, предоставляемое Microsoft Graph, тем самым создав делегированное разрешение.

  • На шаге 1 идентификатор объекта Microsoft Graph в клиенте : 7ea9e944-71ce-443d-811c-71e8047b557a
  • Делегированные User.Read.All разрешения и Group.Read.All идентифицируются по глобально уникальным идентификаторам a154be20-db9c-4678-8ab7-66f6cc099a59 и 5f8c59db-677d-491f-a6b8-5f174b11ec1d соответственно.
  • Субъект — это пользователь, идентифицируемый по идентификатору 3fbd929d-8c56-4462-851e-0eb9a7b3a2a5.
  • Субъект-служба клиента идентифицируется по идентификатору b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94. Это идентификатор объекта субъекта-службы, а не его appId.
POST https://graph.microsoft.com/v1.0/oauth2PermissionGrants
Content-Type: application/json

{
    "clientId": "b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94",
    "consentType": "Principal",
    "resourceId": "7ea9e944-71ce-443d-811c-71e8047b557a",
    "principalId": "3fbd929d-8c56-4462-851e-0eb9a7b3a2a5",
    "scope": "User.Read.All Group.Read.All"
}

Хотя предыдущий запрос предоставляет согласие от имени одного пользователя, вы можете предоставить согласие от имени всех пользователей в клиенте. Текст запроса аналогичен тексту предыдущего запроса, за исключением следующих изменений:

  • Тип согласия имеет значение AllPrincipals, указывающее, что вы даете согласие от имени всех пользователей в клиенте.
  • Свойство principalId не предоставляется или может иметь значение null.

Ниже приведен пример текста запроса на предоставление согласия от имени всех пользователей:

POST https://graph.microsoft.com/v1.0/oauth2PermissionGrants
Content-Type: application/json

{
    "clientId": "b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94",
    "consentType": "AllPrincipals",
    "resourceId": "7ea9e944-71ce-443d-811c-71e8047b557a",
    "scope": "User.Read.All Group.Read.All"
}

Отклик

HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#oauth2PermissionGrants/$entity",
    "clientId": "b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94",
    "consentType": "Principal",
    "id": "47nZsM8O_UuNq5Jz3QValETpqX7OcT1EgRxx6AR7VXqdkr0_VoxiRIUeDrmns6Kl",
    "principalId": "3fbd929d-8c56-4462-851e-0eb9a7b3a2a5",
    "resourceId": "7ea9e944-71ce-443d-811c-71e8047b557a",
    "scope": "User.Read.All Group.Read.All"
}

Если вы предоставили согласие всем пользователям в клиенте, параметр consentType в объекте ответа будет иметь значение AllPrincipals, а principalIdnull.

Подтверждение предоставления разрешений

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

Запрос

GET https://graph.microsoft.com/v1.0/oauth2PermissionGrants?$filter=clientId eq 'b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94' and principalId eq '3fbd929d-8c56-4462-851e-0eb9a7b3a2a5' and consentType eq 'Principal'

Отклик

HTTP/1.1 201 Created
Content-type: application/json

{
    "@odata.context": "https://graph.microsoft.com/v1.0/$metadata#oauth2PermissionGrants",
    "value": [
        {
            "clientId": "b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94",
            "consentType": "Principal",
            "id": "47nZsM8O_UuNq5Jz3QValETpqX7OcT1EgRxx6AR7VXqdkr0_VoxiRIUeDrmns6Kl",
            "principalId": "3fbd929d-8c56-4462-851e-0eb9a7b3a2a5",
            "resourceId": "7ea9e944-71ce-443d-811c-71e8047b557a",
            "scope": "User.Read.All Group.Read.All"
        }
    ]
}

Шаг 3. Отмена делегированных разрешений, предоставленных субъекту-службе от имени пользователя [необязательно]

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

  • Чтобы отменить одно или несколько разрешений, выполните запрос PATCH для объекта oauth2PermissionGrant и укажите только делегированные разрешения для хранения в параметре область.
  • Чтобы отменить все разрешения, выполните запрос DELETE для объекта oauth2PermissionGrant.

Запрос

Следующий запрос отменяет все предоставленные разрешения и сохраняет только предоставленные User.Read.All разрешения. Разрешения удаляются, а ранее предоставленное согласие отменяется.

PATCH https://graph.microsoft.com/v1.0/oauth2PermissionGrants/47nZsM8O_UuNq5Jz3QValETpqX7OcT1EgRxx6AR7VXqdkr0_VoxiRIUeDrmns6Kl
Content-Type: application/json

{
    "scope": "User.Read.All"
}

Отклик

HTTP/1.1 204 No Content

Запрос

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

DELETE https://graph.microsoft.com/v1.0/oauth2PermissionGrants/47nZsM8O_UuNq5Jz3QValETpqX7OcT1EgRxx6AR7VXqdkr0_VoxiRIUeDrmns6Kl

Отклик

HTTP/1.1 204 No Content

Заключение

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