Conceder ou revogar permissões de API programaticamente

A concessão de permissões de API a um aplicativo cliente no Microsoft Entra ID registra as concessões de permissão como objetos que você lê, atualiza ou exclui como quaisquer outros dados. Você pode usar o Microsoft Graph para conceder ou revogar permissões de API para um aplicativo. Esse método evita o consentimento do administrador interativo e é útil para automação ou gerenciamento em massa.

As permissões de aplicativo, também chamadas de funções de aplicativo ou permissões de acesso direto, permitem que um aplicativo chame uma API usando sua própria identidade. Siga estas etapas para conceder ou revogar funções de aplicativo.

Cuidado

Cuidado! As permissões concedidas programaticamente não estão sujeitas a revisão ou confirmação e entram em vigor imediatamente.

Pré-requisitos

Para concluir essas instruções, você precisa:

  • Um locatário do Microsoft Entra.
  • Para executar as solicitações neste artigo em um contexto delegado. Conclua estes passos:
    • Entre em um cliente de API como o Graph Explorer como um usuário com privilégios para criar aplicativos no locatário. Os privilégios para criar concessões de permissão podem ser limitados ou controlados em seu locatário por meio de políticas de consentimento de aplicativo configuradas pelo administrador.
    • No aplicativo no qual você está conectado, dê consentimento às permissões delegadas Application.Read.All e AppRoleAssignment.ReadWrite.All para o usuário conectado. Você não precisa consentir em nome de sua organização.
  • Obtenha a ID de objeto da entidade de serviço do cliente à qual você concede funções de aplicativo. Neste artigo, a entidade de serviço ao cliente é identificada pela ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94. No centro de administração do Microsoft Entra, expanda Aplicativos de identidade>>Aplicativos empresariais>Aplicativos de aplicativos para localizar a entidade de serviço do cliente. Selecione-o e, na página Visão geral , copie o valor da ID do objeto.

Cuidado

Somente os usuários apropriados devem acessar os aplicativos aos quais foi concedida a permissão AppRoleAssignment.ReadWrite.All .

Etapa 1: Obter as funções de aplicativo da entidade de serviço de recurso

Primeiro, localize as funções de aplicativo expostas pela entidade de serviço de recurso. As funções de aplicativo são definidas no objeto appRoles da entidade de serviço. Este artigo usa a entidade de serviço do Microsoft Graph em seu locatário como a entidade de serviço do recurso.

Solicitação

A solicitação a seguir recupera as funções de aplicativo definidas pela entidade de serviço do Microsoft Graph no locatário.

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '00000003-0000-0000-c000-000000000000'&$select=id,displayName,appId,appRoles

Resposta

O exemplo a seguir mostra a resposta.

Observação: o objeto de resposta mostrado aqui pode ser encurtado para legibilidade.

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"
                }
            ]
        }
    ]
}

Etapa 2: Conceder uma função de aplicativo a uma entidade de atendimento ao cliente

Nesta etapa, conceda ao seu aplicativo uma função de aplicativo exposta pelo Microsoft Graph, resultando em uma atribuição de função de aplicativo. Na Etapa 1, a ID do objeto do Microsoft Graph é 7ea9e944-71ce-443d-811c-71e8047b557a, e a função User.Read.All do aplicativo é identificada pela ID df021288-bdef-4463-88db-98f22de89214.

Solicitação

A solicitação a seguir concede ao aplicativo cliente (a entidade de identidade b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94) uma função de aplicativo de ID df021288-bdef-4463-88db-98f22de89214 que é exposta por uma entidade de serviço de recurso de ID 7ea9e944-71ce-443d-811c-71e8047b557a.

Observação

Se você usar o SDK do Python, importe as seguintes bibliotecas:

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

Resposta

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

Confirmar a atribuição de função do aplicativo

Verifique as entidades de segurança com atribuições de função à entidade de serviço de recurso executando a seguinte solicitação.

Solicitação

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

Resposta

O objeto de resposta inclui uma coleção de atribuições de função de aplicativo para sua entidade de serviço de recurso e inclui a atribuição de função de aplicativo que você criou na solicitação anterior.

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"
        }
    ]
}

Etapa 3: revogar uma atribuição de função de aplicativo de uma entidade de serviço ao cliente

Solicitação

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

Resposta

HTTP/1.1 204 No Content

As permissões delegadas, também chamadas de funções de aplicativo ou permissões OAuth2, permitem que um aplicativo chame uma API em nome de um usuário conectado. Siga estas etapas para conceder ou revogar permissões delegadas.

Cuidado

Cuidado! As permissões concedidas programaticamente não estão sujeitas a revisão ou confirmação. Elas entram em vigor imediatamente.

Pré-requisitos

Para concluir essas instruções, você precisa:

  • Um locatário válido do Microsoft Entra.
  • Para executar as solicitações neste artigo como um usuário. Conclua estes passos:
    • Entre em um cliente de API como o Graph Explorer como usuário com a função Administrador de Aplicativos de Nuvem do Microsoft Entra. Essa função é a função menos privilegiada para criar aplicativos e conceder consentimento para permissões delegadas no locatário. Os privilégios para criar concessões de permissão podem ser limitados ou controlados em seu locatário por meio de políticas de consentimento de aplicativo configuradas pelo administrador.
    • No aplicativo no qual você está conectado, dê consentimento às permissões delegadas Application.Read.All e DelegatedPermissionGrant.ReadWrite.All para o usuário conectado. Você não precisa consentir em nome de sua organização.
    • Obtenha a ID de objeto da entidade de serviço do cliente à qual você concede permissões delegadas em nome de um usuário. Neste artigo, a entidade de serviço ao cliente é identificada pela ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94. No centro de administração do Microsoft Entra, expanda Aplicativos de identidade>>Aplicativos empresariais>Aplicativos de aplicativos para localizar a entidade de serviço do cliente. Selecione-o e, na página Visão geral , copie o valor da ID do objeto.

Cuidado

Somente os usuários apropriados devem acessar os aplicativos que receberam a permissão DelegatedPermissionGrant.ReadWrite.All .

Etapa 1: Obter permissões delegadas da entidade de serviço de recurso

Primeiro, localize as permissões delegadas expostas pela entidade de serviço do recurso. As permissões delegadas são definidas no objeto oauth2PermissionScopes da entidade de serviço. Este artigo usa a entidade de serviço do Microsoft Graph em seu locatário como a entidade de serviço do recurso.

Solicitação

Essa solicitação recupera as permissões delegadas definidas pela entidade de serviço do Microsoft Graph no locatário.

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '00000003-0000-0000-c000-000000000000'&$select=id,displayName,appId,oauth2PermissionScopes

Resposta

O exemplo a seguir mostra a resposta.

Observação: o objeto de resposta mostrado aqui pode ser encurtado para legibilidade.

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"
                }                
            ]
        }
    ]
}

Etapa 2: conceder permissão delegada à entidade de serviço do cliente em nome de um usuário

Solicitação

Nesta etapa, conceda ao seu aplicativo permissão delegada exposta pelo Microsoft Graph em nome de um usuário, resultando em uma concessão de permissão delegada.

  • Na Etapa 1, a ID do objeto do Microsoft Graph no locatário é 7ea9e944-71ce-443d-811c-71e8047b557a
  • As permissões User.Read.All delegadas e Group.Read.All são identificadas pelas IDs a154be20-db9c-4678-8ab7-66f6cc099a59 globalmente exclusivas e 5f8c59db-677d-491f-a6b8-5f174b11ec1d respectivamente.
  • A entidade de segurança é um usuário identificado pela ID 3fbd929d-8c56-4462-851e-0eb9a7b3a2a5.
  • A entidade de serviço ao cliente é identificada pela ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94. Essa é a ID do objeto da entidade de serviço e não sua 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"
}

A solicitação anterior concede consentimento em nome de um único usuário, mas você também pode conceder consentimento em nome de todos os usuários no locatário. O corpo da solicitação é semelhante ao corpo da solicitação anterior, exceto com as seguintes alterações:

  • O consentType é AllPrincipals, indicando que você está consentindo em nome de todos os usuários no locatário.
  • A propriedade principalId não é fornecida ou pode ser null.

Aqui está um exemplo de corpo de solicitação para conceder consentimento em nome de todos os usuários:

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

Resposta

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

Se você concedeu consentimento para todos os usuários no locatário, o consentType no objeto de resposta seria AllPrincipals, e o principalId seria null.

Confirmar a concessão de permissão

Verifique as entidades de segurança com permissões delegadas à entidade de serviço de recurso executando a solicitação a seguir.

Solicitação

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'

Resposta

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"
        }
    ]
}

Atualizar a concessão de permissão

Para adicionar mais permissões ou remover algumas permissões do cliente para a entidade de serviço de recurso do usuário, atualize o objeto oauth2PermissionGrant conforme mostrado na solicitação a seguir. A solicitação retorna uma 204 No Content resposta.

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

{
    "scope": "openid profile offline_access DelegatedPermissionGrant.ReadWrite.All AccessReview.ReadWrite.All AgentIdentityBlueprint.ReadWrite.All"
}

Etapa 3: revogar permissões delegadas concedidas a uma entidade de serviço em nome de um usuário [opcional]

Se uma entidade de serviço tiver recebido várias concessões de permissão delegada em nome de um usuário, você poderá optar por revogar concessões específicas ou todas as concessões. Use esse método para remover e revogar o consentimento para as permissões delegadas que você atribuiu à entidade de serviço ao cliente.

  • Para revogar uma ou mais concessões, execute uma solicitação PATCH no objeto oauth2PermissionGrant e especifique apenas as permissões delegadas a serem mantidas no parâmetro scope .
  • Para revogar todas as concessões, envie uma solicitação DELETE para o objeto oauth2PermissionGrant.

Solicitação

Essa solicitação revoga todas as concessões de permissão, exceto a concessão de User.Read.All permissão. Ele remove as permissões e revoga o consentimento concedido anteriormente.

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

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

Resposta

HTTP/1.1 204 No Content

Solicitação

Essa solicitação revoga todas as concessões de permissão para uma entidade de serviço em nome de um usuário.

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

Resposta

HTTP/1.1 204 No Content