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

Saiba como acessar Microsoft Graph de um aplicativo Web em execução no Azure App Service.

Diagrama que mostra o acesso a Microsoft Graph.

Você deseja chamar 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 de Microsoft Entra ID permite que o Serviço de Aplicativo acesse recursos por meio do RBAC (controle de acesso baseado em função), sem a necessidade de credenciais do aplicativo. Depois de atribuir uma identidade gerenciada ao seu aplicativo Web, o Azure cuidará da criação e 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.
  • Adicione permissões do Microsoft Graph API a uma identidade gerenciada.
  • Chame Microsoft Graph de um aplicativo Web usando identidades gerenciadas.

Se você não tiver uma conta Azure, crie uma conta free antes de começar.

Pré-requisitos

  • Um aplicativo Web em execução em Azure App Service que tem o módulo de autenticação/autorização App Service habilitado.

Habilitar a identidade gerenciada no aplicativo

Se você criar e publicar seu aplicativo Web por meio de Visual Studio, a identidade gerenciada foi habilitada em seu 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, defina-o como Ativado, selecione Salvar e selecione Sim para habilitar a identidade gerenciada atribuída pelo 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 você precisa na próxima seção.

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

Conceder acesso ao Microsoft Graph

Ao acessar o Microsoft Graph, a identidade gerenciada precisa ter permissões adequadas para a operação que deseja executar. Atualmente, não há nenhuma opção para atribuir essas permissões por meio do Microsoft Entra admin center.

  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 = "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
    
  2. Depois de executar o script, verifique no Centro de administração do Microsoft Entra que as permissões de API solicitadas são atribuídas à identidade gerenciada.

  3. Vá para Aplicativos. Esse painel exibe todas as entidades de serviço no seu locatário. Selecione Adicionar filtros e, em seguida, insira Tipo de aplicativo == Identidades gerenciadas.

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

    Se você estiver seguindo este tutorial, há dois entidades de serviço com o mesmo nome de exibição, como, por exemplo, secureWebApp. A entidade de serviço que tem uma URL de Página inicial representa o aplicativo Web no locatário. A entidade de serviço que aparece em Identidades Gerenciadas e não deve ter uma URL de página inicial listado , e o ID do objeto deve corresponder ao valor do ID do objeto da identidade gerenciada na seção anterior.

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

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

  6. Em Visão geral, selecione Permissões. Você verá as permissões adicionadas para o Microsoft Graph.

    Captura de tela que mostra o painel Permissões.

Chamar Microsoft Graph

O ChainedTokenCredential, as classes ManagedIdentityCredential e EnvironmentCredential são usadas para obter uma credencial de token para seu código autorizar solicitações a 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:

Instale o pacote da biblioteca de cliente 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 Package Manager

Abra o projeto/solução no Visual Studio e abra o console usando o comando Tools>NuGet Package Manager>Package Manager Console.

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ê concluir este tutorial e não precisar mais do aplicativo Web ou dos recursos associados, limpe os recursos criados.

Exclua o grupo de recursos

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

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

    Captura de tela que mostra a exclusão do grupo de recursos.

  3. Insira o nome do grupo de recursos para confirmar.

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

Neste tutorial, você aprendeu a:

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

Saiba como conectar um aplicativo .NET Core ou Node.js app a um banco de dados.