Compartilhar via


Acessar o Microsoft Graph em um aplicativo protegido como o aplicativo

Saiba como acessar o Microsoft Graph de um aplicativo Web em execução no Serviço de Aplicativo do Azure.

Diagrama que mostra o acesso ao Microsoft Graph.

Você deseja chamar o Microsoft Graph para o aplicativo Web. Um modo seguro de permitir o acesso do aplicativo Web aos dados é usar uma identidade gerenciada atribuída ao sistema. Uma identidade gerenciada da ID do Microsoft Entra permite que o Serviço de Aplicativo acesse recursos pelo controle de acesso baseado em função (RBAC), sem a necessidade de credenciais do aplicativo. Depois de atribuir uma identidade gerenciada ao seu aplicativo Web, o Azure cuida da criação e da distribuição de um certificado. Você não precisa se preocupar em gerenciar segredos nem credenciais de aplicativo.

Neste tutorial, você aprenderá como:

  • Criar uma identidade gerenciada atribuída ao sistema em um aplicativo Web.
  • Adicionar permissões de API do Microsoft Graph a uma identidade gerenciada.
  • Chamar o Microsoft Graph em um aplicativo Web usando identidades gerenciadas.

Caso você não tenha uma assinatura do Azure, crie uma conta gratuita do Azure antes de começar.

Pré-requisitos

Habilitar a identidade gerenciada no aplicativo

Se você criar e publicar o aplicativo Web por meio do Visual Studio, a identidade gerenciada foi habilitada no aplicativo para você. No serviço de aplicativo, selecione Identidade no painel esquerdo e escolha Atribuído ao sistema. Verifique se Status está definido como Ativado. Caso contrário, selecione Salvar e Sim para habilitar a identidade gerenciada atribuída ao sistema. Quando a identidade gerenciada é habilitada, o status é definido como Ativado e a ID do objeto fica disponível.

Anote o valor da ID do Objeto, que será necessária na próxima etapa.

Captura de tela que mostra a identidade atribuída ao sistema.

Permitir acesso ao Microsoft Graph

Ao acessar o Microsoft Graph, a identidade gerenciada precisa ter as permissões adequadas para a operação que ele deseja executar. Atualmente, não há opção para atribuir essas permissões por meio do centro de administração do Microsoft Entra. O script a seguir adicionará as permissões de API do Microsoft Graph solicitadas ao objeto de entidade de serviço de identidade gerenciada.

# Install the module.
# Install-Module Microsoft.Graph -Scope CurrentUser

# The tenant ID
$TenantId = "aaaabbbb-0000-cccc-1111-dddd2222eeee"

# The name of your web app, which has a managed identity.
$webAppName = "SecureWebApp-20201106120003" 
$resourceGroupName = "SecureWebApp-20201106120003ResourceGroup"

# The name of the app role that the managed identity should be assigned to.
$appRoleName = "User.Read.All"

# Get the web app's managed identity's object ID.
Connect-AzAccount -Tenant $TenantId
$managedIdentityObjectId = (Get-AzWebApp -ResourceGroupName $resourceGroupName -Name $webAppName).identity.principalid

Connect-MgGraph -TenantId $TenantId -Scopes 'Application.Read.All','AppRoleAssignment.ReadWrite.All'

# Get Microsoft Graph app's service principal and app role.
$serverApplicationName = "Microsoft Graph"
$serverServicePrincipal = (Get-MgServicePrincipal -Filter "DisplayName eq '$serverApplicationName'")
$serverServicePrincipalObjectId = $serverServicePrincipal.Id

$appRoleId = ($serverServicePrincipal.AppRoles | Where-Object {$_.Value -eq $appRoleName }).Id

# Assign the managed identity access to the app role.
New-MgServicePrincipalAppRoleAssignment `
    -ServicePrincipalId $managedIdentityObjectId `
    -PrincipalId $managedIdentityObjectId `
    -ResourceId $serverServicePrincipalObjectId `
    -AppRoleId $appRoleId

Depois de executar o script, é possível verificar no centro de administração do Microsoft Entra se as permissões de API solicitadas foram atribuídas à identidade gerenciada.

Acesse Aplicativos e, em seguida, selecione Aplicativos empresariais. Esse painel exibe todas as entidades de serviço no seu locatário. Adicione um filtro para “Tipo de aplicativo == Identidades Gerenciadas” e selecione a entidade de serviço para a identidade gerenciada.

Se você estiver seguindo este tutorial, haverá duas entidades de serviço com o mesmo nome de exibição (SecureWebApp2020094113531, por exemplo). A entidade de serviço que tem uma URL de Home Page representa o aplicativo Web no locatário. A entidade de serviço que aparece em Identidades Gerenciadasnão deve ter uma URL de Home Page listada e a ID do objeto deve corresponder ao valor da ID de objeto da identidade gerenciada na etapa anterior.

Selecione a entidade de serviço para a identidade gerenciada.

Captura de tela que mostra a opção Todos os aplicativos.

Em Visão geral, selecione Permissões e você verá as permissões adicionadas ao Microsoft Graph.

Captura de tela que mostra o painel Permissões.

Chamar o Microsoft Graph

As classes ChainedTokenCredential, ManagedIdentityCredential e EnvironmentCredential são usadas para obtenção de uma credencial de token para o código destinada à autorização de solicitações ao Microsoft Graph. Crie uma instância da classe ChainedTokenCredential, que usa a identidade gerenciada no ambiente do Serviço de Aplicativo ou as variáveis de ambiente de desenvolvimento para buscar tokens e anexá-los ao cliente do serviço. O exemplo de código a seguir obtém a credencial de token autenticada e a usa para criar um objeto de cliente de serviço, que obtém os usuários no grupo.

Para ver esse código como parte de um aplicativo de exemplo, confira o exemplo no GitHub.

Instalar o pacote de biblioteca de clientes Microsoft.Identity.Web.GraphServiceClient

Instale os pacotes NuGet Microsoft.Graph e Microsoft.Identity.Web.GraphServiceClient em seu projeto usando a interface de linha de comando (CLI) do .NET ou o console do gerenciador de pacotes no Visual Studio.

CLI do .NET

Abra uma linha de comando e alterne para o diretório que contém o arquivo de projeto.

Execute os comandos de instalação.

dotnet add package Microsoft.Identity.Web.GraphServiceClient
dotnet add package Microsoft.Graph

Console do Gerenciador de Pacotes

Abra o projeto/a solução no Visual Studio e abra o console do usando o comando Ferramentas>Gerenciador de Pacotes NuGet>Console do Gerenciador de Pacotes.

Execute os comandos de instalação.

Install-Package Microsoft.Identity.Web.GraphServiceClient
Install-Package Microsoft.Graph

Exemplo

using System;
using System.Collections.Generic;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Mvc.RazorPages;
using Microsoft.Extensions.Logging;
using Microsoft.Graph;
using Azure.Identity;

...

public IList<MSGraphUser> Users { get; set; }

public async Task OnGetAsync()
{
    // Create the Graph service client with a ChainedTokenCredential which gets an access
    // token using the available Managed Identity or environment variables if running
    // in development.
    var credential = new ChainedTokenCredential(
        new ManagedIdentityCredential(),
        new EnvironmentCredential());

    string[] scopes = new[] { "https://graph.microsoft.com/.default" };

    var graphServiceClient = new GraphServiceClient(
        credential, scopes);

    List<MSGraphUser> msGraphUsers = new List<MSGraphUser>();
    try
    {
        //var users = await graphServiceClient.Users.Request().GetAsync();
        var users = await graphServiceClient.Users.GetAsync();
        foreach (var u in users.Value)
        {
            MSGraphUser user = new MSGraphUser();
            user.userPrincipalName = u.UserPrincipalName;
            user.displayName = u.DisplayName;
            user.mail = u.Mail;
            user.jobTitle = u.JobTitle;

            msGraphUsers.Add(user);
        }
    }
    catch (Exception ex)
    {
        string msg = ex.Message;
    }

    Users = msGraphUsers;
}

Limpar os recursos

Se você concluiu este tutorial e não precisa mais do aplicativo Web nem dos recursos associados, limpe os recursos que você criou.

Próximas etapas