A sua aplicação ainda poderá necessitar temporariamente de permissões do Azure AD Graph para aceder aos recursos. Pode seguir um dos três métodos descritos neste artigo para configurar as permissões do Azure AD Graph para o registo de aplicações:
Além disso, precisa dos seguintes recursos e privilégios:
- Inicie sessão num cliente de API, como o Graph Explorer , para executar os pedidos HTTP.
- A aplicação utilizada para efetuar estas alterações tem de ter a
Application.ReadWrite.All
permissão concedida.
Utilizar a API de aplicações do Microsoft Graph
O objeto de aplicação do Microsoft Graph inclui uma propriedade requiredResourceAccess que é uma coleção de objetos com informações sobre a API de recursos e permissões. Utilize esta propriedade para configurar permissões do Azure AD Graph, conforme descrito nos passos seguintes.
Passo 1: identificar os IDs de permissão para as permissões do Azure AD Graph necessárias para a sua aplicação
Identifique as permissões do Azure AD Graph necessárias para a sua aplicação, os respetivos IDs de permissão e se são funções de aplicação (permissões de aplicação) ou oauth2PermissionScopes (permissões delegadas). Para obter mais informações, veja Referência de permissões do Azure AD Graph.
O Azure AD Graph é identificado como um objeto servicePrincipal com 00000002-0000-0000-c000-000000000000
o seu appId globalmente exclusivo e Windows Azure Active Directory
como displayName e appDisplayName. Execute o seguinte pedido para obter o objeto do principal de serviço do Azure AD Graph no seu inquilino.
GET https://graph.microsoft.com/v1.0/servicePrincipals?$filter=appId eq '00000002-0000-0000-c000-000000000000'
// Code snippets are only available for the latest version. Current version is 5.x
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.ServicePrincipals.GetAsync((requestConfiguration) =>
{
requestConfiguration.QueryParameters.Filter = "appId eq '00000002-0000-0000-c000-000000000000'";
});
Leia a documentação do SDK para obter detalhes sobre como adicionar o SDK ao projeto e criar uma instância authProvider .
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphserviceprincipals "github.com/microsoftgraph/msgraph-sdk-go/serviceprincipals"
//other-imports
)
requestFilter := "appId eq '00000002-0000-0000-c000-000000000000'"
requestParameters := &graphserviceprincipals.ServicePrincipalsRequestBuilderGetQueryParameters{
Filter: &requestFilter,
}
configuration := &graphserviceprincipals.ServicePrincipalsRequestBuilderGetRequestConfiguration{
QueryParameters: requestParameters,
}
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
servicePrincipals, err := graphClient.ServicePrincipals().Get(context.Background(), configuration)
Leia a documentação do SDK para obter detalhes sobre como adicionar o SDK ao projeto e criar uma instância authProvider .
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
ServicePrincipalCollectionResponse result = graphClient.servicePrincipals().get(requestConfiguration -> {
requestConfiguration.queryParameters.filter = "appId eq '00000002-0000-0000-c000-000000000000'";
});
Leia a documentação do SDK para obter detalhes sobre como adicionar o SDK ao projeto e criar uma instância authProvider .
<?php
use Microsoft\Graph\GraphServiceClient;
use Microsoft\Graph\Generated\ServicePrincipals\ServicePrincipalsRequestBuilderGetRequestConfiguration;
$graphServiceClient = new GraphServiceClient($tokenRequestContext, $scopes);
$requestConfiguration = new ServicePrincipalsRequestBuilderGetRequestConfiguration();
$queryParameters = ServicePrincipalsRequestBuilderGetRequestConfiguration::createQueryParameters();
$queryParameters->filter = "appId eq '00000002-0000-0000-c000-000000000000'";
$requestConfiguration->queryParameters = $queryParameters;
$result = $graphServiceClient->servicePrincipals()->get($requestConfiguration)->wait();
Leia a documentação do SDK para obter detalhes sobre como adicionar o SDK ao projeto e criar uma instância authProvider .
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.service_principals.service_principals_request_builder import ServicePrincipalsRequestBuilder
from kiota_abstractions.base_request_configuration import RequestConfiguration
# To initialize your graph_client, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
query_params = ServicePrincipalsRequestBuilder.ServicePrincipalsRequestBuilderGetQueryParameters(
filter = "appId eq '00000002-0000-0000-c000-000000000000'",
)
request_configuration = RequestConfiguration(
query_parameters = query_params,
)
result = await graph_client.service_principals.get(request_configuration = request_configuration)
Leia a documentação do SDK para obter detalhes sobre como adicionar o SDK ao projeto e criar uma instância authProvider .
No objeto de resposta, os detalhes das permissões de aplicação do Azure AD Graph são listados no objeto appRoles , enquanto os detalhes das permissões delegadas estão listados no objeto oauth2PermissionScopes .
Observação: o objeto de resposta mostrado aqui pode ser encurtado para legibilidade.
HTTP/1.1 200 OK
Content-type: application/json
{
"@odata.context": "https://graph.microsoft.com/v1.0/$metadata#servicePrincipals",
"value": [
{
"id": "1804a6f8-e623-4520-8f40-ba1b0c11c42d",
"accountEnabled": true,
"appDisplayName": "Windows Azure Active Directory",
"appDescription": null,
"appId": "00000002-0000-0000-c000-000000000000",
"appOwnerOrganizationId": "f8cdef31-a31e-4b4a-93e4-5f571e91255a",
"appRoleAssignmentRequired": false,
"displayName": "Windows Azure Active Directory",
"servicePrincipalNames": [
"https://graph.windows.net",
"00000002-0000-0000-c000-000000000000/graph.microsoftazure.us",
"00000002-0000-0000-c000-000000000000/graph.windows.net",
"00000002-0000-0000-c000-000000000000/directory.windows.net",
"00000002-0000-0000-c000-000000000000",
"https://graph.windows.net/",
"https://graph.microsoftazure.us"
],
"servicePrincipalType": "Application",
"signInAudience": "AzureADMultipleOrgs",
"appRoles": [
{
"allowedMemberTypes": [
"Application"
],
"description": "Allows the app to read applications and service principals without a signed-in user",
"displayName": "Read all applications",
"id": "3afa6a7d-9b1a-42eb-948e-1650a849e176",
"isEnabled": true,
"origin": "Application",
"value": "Application.Read.All"
}
],
"oauth2PermissionScopes": [
{
"adminConsentDescription": "Allows users to sign in to the app, and allows the app to read the profile of signed-in users. It also allow the app to read basic company information of signed-in users.",
"adminConsentDisplayName": "Sign in and read user profile",
"id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6",
"isEnabled": true,
"type": "User",
"userConsentDescription": "Allows you to sign in to the app with your work account and let the app read your profile. It also allows the app to read basic company information.",
"userConsentDisplayName": "Sign you in and read your profile",
"value": "User.Read"
}
]
}
]
}
Na saída truncada anterior, 311a71cc-e848-46a1-bdf8-97ff7156d8e6
encontra-se o ID de permissão para a permissão delegada User.Read , enquanto 3afa6a7d-9b1a-42eb-948e-1650a849e176
é o ID de permissão da permissão Application.Read.All no Azure AD Graph.
Passo 2: Adicionar permissões do Azure AD Graph à sua aplicação
O exemplo seguinte chama a API de Atualização da aplicação para adicionar as permissões Utilizador.Ler e Aplicação.Read.All delegadas e da aplicação a um registo de aplicações identificado pelo ID 581088ba-83c5-4975-b8af-11d2d7a76e98
do objeto .
Importante
Para atualizar a propriedade requiredResourceAccess , tem de transmitir as permissões existentes e novas. Transmitir apenas novas permissões substitui e remove as permissões existentes.
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"
}
]
}
]
}
// Code snippets are only available for the latest version. Current version is 5.x
// Dependencies
using Microsoft.Graph.Models;
var requestBody = new Application
{
RequiredResourceAccess = new List<RequiredResourceAccess>
{
new RequiredResourceAccess
{
ResourceAppId = "00000002-0000-0000-c000-000000000000",
ResourceAccess = new List<ResourceAccess>
{
new ResourceAccess
{
Id = Guid.Parse("311a71cc-e848-46a1-bdf8-97ff7156d8e6"),
Type = "Scope",
},
new ResourceAccess
{
Id = Guid.Parse("3afa6a7d-9b1a-42eb-948e-1650a849e176"),
Type = "Role",
},
},
},
},
};
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=csharp
var result = await graphClient.Applications["{application-id}"].PatchAsync(requestBody);
Leia a documentação do SDK para obter detalhes sobre como adicionar o SDK ao projeto e criar uma instância authProvider .
mgc applications patch --application-id {application-id} --body '{\
"requiredResourceAccess": [\
{\
"resourceAppId": "00000002-0000-0000-c000-000000000000",\
"resourceAccess": [\
{\
"id": "311a71cc-e848-46a1-bdf8-97ff7156d8e6",\
"type": "Scope"\
},\
{\
"id": "3afa6a7d-9b1a-42eb-948e-1650a849e176",\
"type": "Role"\
}\
]\
}\
]\
}\
'
Leia a documentação do SDK para obter detalhes sobre como adicionar o SDK ao projeto e criar uma instância authProvider .
// Code snippets are only available for the latest major version. Current major version is $v1.*
// Dependencies
import (
"context"
msgraphsdk "github.com/microsoftgraph/msgraph-sdk-go"
graphmodels "github.com/microsoftgraph/msgraph-sdk-go/models"
//other-imports
)
requestBody := graphmodels.NewApplication()
requiredResourceAccess := graphmodels.NewRequiredResourceAccess()
resourceAppId := "00000002-0000-0000-c000-000000000000"
requiredResourceAccess.SetResourceAppId(&resourceAppId)
resourceAccess := graphmodels.NewResourceAccess()
id := uuid.MustParse("311a71cc-e848-46a1-bdf8-97ff7156d8e6")
resourceAccess.SetId(&id)
type := "Scope"
resourceAccess.SetType(&type)
resourceAccess1 := graphmodels.NewResourceAccess()
id := uuid.MustParse("3afa6a7d-9b1a-42eb-948e-1650a849e176")
resourceAccess1.SetId(&id)
type := "Role"
resourceAccess1.SetType(&type)
resourceAccess := []graphmodels.ResourceAccessable {
resourceAccess,
resourceAccess1,
}
requiredResourceAccess.SetResourceAccess(resourceAccess)
requiredResourceAccess := []graphmodels.RequiredResourceAccessable {
requiredResourceAccess,
}
requestBody.SetRequiredResourceAccess(requiredResourceAccess)
// To initialize your graphClient, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=go
applications, err := graphClient.Applications().ByApplicationId("application-id").Patch(context.Background(), requestBody, nil)
Leia a documentação do SDK para obter detalhes sobre como adicionar o SDK ao projeto e criar uma instância authProvider .
// Code snippets are only available for the latest version. Current version is 6.x
GraphServiceClient graphClient = new GraphServiceClient(requestAdapter);
Application application = new Application();
LinkedList<RequiredResourceAccess> requiredResourceAccess = new LinkedList<RequiredResourceAccess>();
RequiredResourceAccess requiredResourceAccess1 = new RequiredResourceAccess();
requiredResourceAccess1.setResourceAppId("00000002-0000-0000-c000-000000000000");
LinkedList<ResourceAccess> resourceAccess = new LinkedList<ResourceAccess>();
ResourceAccess resourceAccess1 = new ResourceAccess();
resourceAccess1.setId(UUID.fromString("311a71cc-e848-46a1-bdf8-97ff7156d8e6"));
resourceAccess1.setType("Scope");
resourceAccess.add(resourceAccess1);
ResourceAccess resourceAccess2 = new ResourceAccess();
resourceAccess2.setId(UUID.fromString("3afa6a7d-9b1a-42eb-948e-1650a849e176"));
resourceAccess2.setType("Role");
resourceAccess.add(resourceAccess2);
requiredResourceAccess1.setResourceAccess(resourceAccess);
requiredResourceAccess.add(requiredResourceAccess1);
application.setRequiredResourceAccess(requiredResourceAccess);
Application result = graphClient.applications().byApplicationId("{application-id}").patch(application);
Leia a documentação do SDK para obter detalhes sobre como adicionar o SDK ao projeto e criar uma instância authProvider .
const options = {
authProvider,
};
const client = Client.init(options);
const application = {
requiredResourceAccess: [
{
resourceAppId: '00000002-0000-0000-c000-000000000000',
resourceAccess: [
{
id: '311a71cc-e848-46a1-bdf8-97ff7156d8e6',
type: 'Scope'
},
{
id: '3afa6a7d-9b1a-42eb-948e-1650a849e176',
type: 'Role'
}
]
}
]
};
await client.api('/applications/581088ba-83c5-4975-b8af-11d2d7a76e98')
.update(application);
Leia a documentação do SDK para obter detalhes sobre como adicionar o SDK ao projeto e criar uma instância authProvider .
<?php
use Microsoft\Graph\GraphServiceClient;
use Microsoft\Graph\Generated\Models\Application;
use Microsoft\Graph\Generated\Models\RequiredResourceAccess;
use Microsoft\Graph\Generated\Models\ResourceAccess;
$graphServiceClient = new GraphServiceClient($tokenRequestContext, $scopes);
$requestBody = new Application();
$requiredResourceAccessRequiredResourceAccess1 = new RequiredResourceAccess();
$requiredResourceAccessRequiredResourceAccess1->setResourceAppId('00000002-0000-0000-c000-000000000000');
$resourceAccessResourceAccess1 = new ResourceAccess();
$resourceAccessResourceAccess1->setId('311a71cc-e848-46a1-bdf8-97ff7156d8e6');
$resourceAccessResourceAccess1->setType('Scope');
$resourceAccessArray []= $resourceAccessResourceAccess1;
$resourceAccessResourceAccess2 = new ResourceAccess();
$resourceAccessResourceAccess2->setId('3afa6a7d-9b1a-42eb-948e-1650a849e176');
$resourceAccessResourceAccess2->setType('Role');
$resourceAccessArray []= $resourceAccessResourceAccess2;
$requiredResourceAccessRequiredResourceAccess1->setResourceAccess($resourceAccessArray);
$requiredResourceAccessArray []= $requiredResourceAccessRequiredResourceAccess1;
$requestBody->setRequiredResourceAccess($requiredResourceAccessArray);
$result = $graphServiceClient->applications()->byApplicationId('application-id')->patch($requestBody)->wait();
Leia a documentação do SDK para obter detalhes sobre como adicionar o SDK ao projeto e criar uma instância authProvider .
Import-Module Microsoft.Graph.Applications
$params = @{
requiredResourceAccess = @(
@{
resourceAppId = "00000002-0000-0000-c000-000000000000"
resourceAccess = @(
@{
id = "311a71cc-e848-46a1-bdf8-97ff7156d8e6"
type = "Scope"
}
@{
id = "3afa6a7d-9b1a-42eb-948e-1650a849e176"
type = "Role"
}
)
}
)
}
Update-MgApplication -ApplicationId $applicationId -BodyParameter $params
Leia a documentação do SDK para obter detalhes sobre como adicionar o SDK ao projeto e criar uma instância authProvider .
# Code snippets are only available for the latest version. Current version is 1.x
from msgraph import GraphServiceClient
from msgraph.generated.models.application import Application
from msgraph.generated.models.required_resource_access import RequiredResourceAccess
from msgraph.generated.models.resource_access import ResourceAccess
# To initialize your graph_client, see https://learn.microsoft.com/en-us/graph/sdks/create-client?from=snippets&tabs=python
request_body = Application(
required_resource_access = [
RequiredResourceAccess(
resource_app_id = "00000002-0000-0000-c000-000000000000",
resource_access = [
ResourceAccess(
id = UUID("311a71cc-e848-46a1-bdf8-97ff7156d8e6"),
type = "Scope",
),
ResourceAccess(
id = UUID("3afa6a7d-9b1a-42eb-948e-1650a849e176"),
type = "Role",
),
],
),
],
)
result = await graph_client.applications.by_application_id('application-id').patch(request_body)
Leia a documentação do SDK para obter detalhes sobre como adicionar o SDK ao projeto e criar uma instância authProvider .
HTTP/1.1 204 No Content
Passo 3: verificar se as permissões do Azure AD Graph foram adicionadas à sua aplicação
Verifique se o registo da aplicação tem as permissões da Graph API do Azure AD que adicionou no Passo 2 ao:
Chamar o ponto final GET /application/{id} do Microsoft Graph e ler a propriedade requiredResourceAccess da seguinte forma:
GET https://graph.microsoft.com/v1.0/applications/581088ba-83c5-4975-b8af-11d2d7a76e98?$select=id,requiredResourceAccess
A verificar a página Registos de aplicações no centro de administração do Microsoft Entra.
Passo 4: Conceder consentimento do administrador
Apesar de ter adicionado permissões do Azure AD Graph, não concedeu estas permissões à aplicação. Muitas permissões requerem o consentimento do administrador antes de poderem ser utilizadas para aceder a dados organizacionais. Inicie sessão no centro de administração do Microsoft Entra como um administrador de função com privilégios e conceda o consentimento do administrador para as permissões para o registo de aplicações.
Conceder permissões de API sem utilizar o pedido de consentimento
Ao utilizar o Microsoft Graph e quaisquer SDKs relacionados, pode conceder permissões para um registo de aplicações sem a necessidade de utilizar o centro de administração do Microsoft Entra e selecionar o botão Conceder consentimento de administrador para [Empresa] na página permissões da API. Para obter mais informações, veja Conceder ou revogar permissões de API programaticamente.