Compartilhar via


Conceder ou revogar permissões de API programaticamente

Conceder permissões de API a uma aplicação cliente no Microsoft Entra ID regista as concessões de permissão como objetos que lê, atualiza ou elimina como quaisquer outros dados. Pode utilizar o Microsoft Graph para conceder ou revogar permissões de API para uma aplicação. Este método evita o consentimento do administrador interativo e é útil para automatização ou gestão em massa.

As permissões de aplicação, também denominadas funções de aplicação ou permissões de acesso direto, permitem que uma aplicação chame uma API com a sua própria identidade. Siga estes passos para conceder ou revogar funções de aplicações.

Cuidado

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

Pré-requisitos

Para concluir estas instruções, precisa de:

  • Um inquilino Microsoft Entra.
  • Para executar os pedidos neste artigo num contexto delegado. Conclua estes passos:
    • Inicie sessão num cliente de API, como o Graph Explorer como um utilizador com privilégios para criar aplicações no inquilino. Os privilégios para criar concessões de permissão podem ser limitados ou controlados no seu inquilino através de políticas de consentimento de aplicações configuradas pelo administrador.
    • Na aplicação na qual tem sessão iniciada, consenta as permissões Application.Read.All e AppRoleAssignment.ReadWrite.All delegated para o utilizador com sessão iniciada. Não precisa de dar consentimento em nome da sua organização.
  • Obtenha o ID de objeto do principal de serviço de cliente ao qual concede funções de aplicação. Neste artigo, o principal de serviço de cliente é identificado pelo ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94. No centro de administração do Microsoft Entra, expanda Aplicações de Identidade>Aplicações>empresariais>Aplicações de aplicações para encontrar o principal de serviço de cliente. Selecione-o e, na página Descrição geral , copie o valor do ID do Objeto.

Cuidado

Apenas os utilizadores adequados devem aceder às aplicações que tenham a permissão AppRoleAssignment.ReadWrite.All concedida.

Passo 1: obter as funções de aplicação do principal de serviço de recursos

Em primeiro lugar, localize as funções da aplicação expostas pelo principal do serviço de recursos. As funções de aplicação são definidas no objeto appRoles do principal de serviço. Este artigo utiliza o principal de serviço do Microsoft Graph no seu inquilino como principal de serviço de recursos.

Solicitação

O pedido seguinte obtém as funções de aplicação definidas pelo principal de serviço do Microsoft Graph no inquilino.

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq 'Microsoft Graph'&$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"
                }
            ]
        }
    ]
}

Passo 2: Conceder uma função de aplicação a um principal de serviço de cliente

Neste passo, conceda à sua aplicação uma função de aplicação exposta pelo Microsoft Graph, o que resulta numa atribuição de função de aplicação. No Passo 1, o ID de objeto do Microsoft Graph é 7ea9e944-71ce-443d-811c-71e8047b557ae a função User.Read.All da aplicação é identificada pelo ID df021288-bdef-4463-88db-98f22de89214.

Solicitação

O pedido seguinte concede à aplicação cliente (o principal do ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94) uma função de aplicação do ID df021288-bdef-4463-88db-98f22de89214 que é exposta por um principal de serviço de recursos do ID 7ea9e944-71ce-443d-811c-71e8047b557a.

Observação

Se utilizar o SDK 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 de aplicação

Verifique os principais com atribuições de funções ao principal de serviço de recursos ao executar o seguinte pedido.

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ções de aplicação ao principal de serviço de recursos e inclui a atribuição de função de aplicação que criou no pedido 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"
        }
    ]
}

Passo 3: Revogar uma atribuição de função de aplicação a partir de um principal de serviço de 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 denominadasfunções de aplicação ou permissões OAuth2, permitem que uma aplicação chame uma API em nome de um utilizador com sessão iniciada. Siga estes passos 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. Produzem efeito imediatamente.

Pré-requisitos

Para concluir estas instruções, precisa de:

  • Um inquilino Microsoft Entra válido.
  • Para executar os pedidos neste artigo como um utilizador. Conclua estes passos:
    • Inicie sessão num cliente de API como o Graph Explorer como um utilizador com a função de Microsoft Entra Administrador de Aplicações na Cloud. Esta função é a função com menos privilégios para criar aplicações e conceder consentimento a permissões delegadas no inquilino. Os privilégios para criar concessões de permissão podem ser limitados ou controlados no seu inquilino através de políticas de consentimento de aplicações configuradas pelo administrador.
    • Na aplicação na qual iniciou sessão, consenta as permissões Application.Read.All e DelegatedPermissionGrant.ReadWrite.All delegated para o utilizador com sessão iniciada. Não precisa de dar consentimento em nome da sua organização.
    • Obtenha o ID de objeto do principal de serviço de cliente ao qual concede permissões delegadas em nome de um utilizador. Neste artigo, o principal de serviço de cliente é identificado pelo ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94. No centro de administração do Microsoft Entra, expanda Aplicações de Identidade>Aplicações>empresariais>Aplicações de aplicações para encontrar o principal de serviço de cliente. Selecione-o e, na página Descrição geral , copie o valor do ID do Objeto.

Cuidado

Apenas os utilizadores adequados devem aceder às aplicações com a permissão DelegatedPermissionGrant.ReadWrite.All .

Passo 1: Obter permissões delegadas do principal de serviço de recursos

Primeiro, localize as permissões delegadas expostas pelo principal do serviço de recursos. As permissões delegadas são definidas no objeto oauth2PermissionScopes do principal de serviço. Este artigo utiliza o principal de serviço do Microsoft Graph no seu inquilino como principal de serviço de recursos.

Solicitação

Este pedido obtém as permissões delegadas definidas pelo principal de serviço do Microsoft Graph no inquilino.

GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=displayName eq 'Microsoft Graph'&$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"
                }                
            ]
        }
    ]
}

Passo 2: Conceder permissão delegada ao principal de serviço de cliente em nome de um utilizador

Solicitação

Neste passo, conceda a permissão delegada da sua aplicação que é exposta pelo Microsoft Graph em nome de um utilizador, o que resulta numa concessão de permissão delegada.

  • No Passo 1, o ID de objeto do Microsoft Graph no inquilino é 7ea9e944-71ce-443d-811c-71e8047b557a
  • As permissões User.Read.All delegadas e Group.Read.All são identificadas pelos IDs exclusivos a154be20-db9c-4678-8ab7-66f6cc099a59 global e 5f8c59db-677d-491f-a6b8-5f174b11ec1d respetivamente.
  • O principal é um utilizador identificado pelo ID 3fbd929d-8c56-4462-851e-0eb9a7b3a2a5.
  • O principal de serviço do cliente é identificado pelo ID b0d9b9e3-0ecf-4bfd-8dab-9273dd055a94. Este é o ID de objeto do principal de serviço e não o 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"
}

O pedido anterior concede consentimento em nome de um único utilizador, mas também pode conceder consentimento em nome de todos os utilizadores no inquilino. O corpo do pedido é semelhante ao corpo do pedido anterior, exceto com as seguintes alterações:

  • O consentType é AllPrincipals, que indica que está a consentir em nome de todos os utilizadores no inquilino.
  • A propriedade principalId não é fornecida ou pode ser null.

Eis um corpo de pedido de exemplo para conceder consentimento em nome de todos os utilizadores:

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 concedeu consentimento a todos os utilizadores no inquilino, o consentType no objeto de resposta seria AllPrincipalse o principalId seria null.

Confirmar a concessão de permissão

Verifique os principais com permissões delegadas para o principal de serviço de recursos ao executar o seguinte pedido.

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

Passo 3: revogar as permissões delegadas concedidas a um principal de serviço em nome de um utilizador [opcional]

Se tiver sido concedida a um principal de serviço várias concessões de permissão delegadas em nome de um utilizador, pode optar por revogar concessões específicas ou todas as concessões. Utilize este método para remover e revogar o consentimento das permissões delegadas que atribuiu ao principal de serviço de cliente.

  • Para revogar uma ou mais concessões, execute um pedido PATCH no objeto oauth2PermissionGrant e especifique apenas as permissões delegadas a reter no parâmetro de âmbito .
  • Para revogar todas as concessões, envie um pedido DELETE para o objeto oauth2PermissionGrant.

Solicitação

Este pedido revoga todas as concessões de permissão, exceto a User.Read.All concessão de permissão. 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

Este pedido revoga todas as concessões de permissão para um principal de serviço em nome de um utilizador.

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

Resposta

HTTP/1.1 204 No Content