Tutorial: acessar o Microsoft Graph de um aplicativo ;NET protegido como o aplicativo

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

Diagram that shows accessing 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ê.

  1. No serviço de aplicativo, selecione Identidade no painel esquerdo e escolha Atribuído ao sistema.

  2. 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.

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

Screenshot that shows the system-assigned identity.

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.

  1. Executar o script a seguir adicionará as permissões de API do Microsoft Graph solicitadas ao objeto da entidade de serviço de identidade gerenciada.

    # Install the module.
    # Install-Module Microsoft.Graph -Scope CurrentUser
    
    # The tenant ID
    $TenantId = "11111111-1111-1111-1111-111111111111"
    
    # 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
    
  2. 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.

  3. Acesse Aplicativos e, em seguida, selecione Aplicativos empresariais. Esse painel exibe todas as entidades de serviço no seu locatário. Adicione um filtro no “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.

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

    Screenshot that shows the All applications option.

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

    Screenshot that shows the Permissions pane.

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:

Instalar o pacote da biblioteca de clientes Microsoft.Identity.Web.MicrosoftGraph

Instale o pacote NuGet Microsoft.Identity.Web.MicrosoftGraph em seu projeto usando a interface de linha de comando do .NET Core ou o Console do Gerenciador de Pacotes no Visual Studio.

Linha de comando do .NET Core

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.MicrosoftGraph
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.MicrosoftGraph
Install-Package Microsoft.Graph

Exemplo de .NET

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.

Exclua o grupo de recursos

No portal do Azure, selecione Grupos de recursos no menu do portal e selecione o grupo de recursos que contém o serviço de aplicativo e o plano do serviço de aplicativo.

Selecione Excluir grupo de recursos para excluir o grupo de recursos e todos os recursos que ele contém.

Screenshot that shows deleting the resource group.

Esse comando pode levar vários minutos para ser executado.

Próximas etapas

Neste tutorial, você aprendeu a:

  • 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.

Saiba como conectar um aplicativo .NET Core, aplicativo Python, aplicativo Java ou aplicativo Node.js a um banco de dados.