Tutorial: Acede ao Microsoft Graph a partir de uma aplicação .NET segura como a aplicação

Aprenda como aceder ao Microsoft Graph a partir de uma aplicação web a correr no Azure App Service.

Diagrama que mostra o acesso a Microsoft Graph.

Pretendes chamar Microsoft Graph para a aplicação web. Uma maneira segura de dar ao seu aplicativo Web acesso aos dados é usar uma identidade gerenciada atribuída ao sistema. Uma identidade gerida do Microsoft Entra ID permite ao App Service aceder a recursos através do controlo de acesso baseado em funções (RBAC), sem exigir credenciais da aplicação. Depois de atribuir uma identidade gerida à sua aplicação web, o Azure trata da criação e distribuição de um certificado. Você não precisa se preocupar em gerenciar segredos ou credenciais de aplicativos.

Neste tutorial, irá aprender a:

  • Crie uma identidade gerenciada atribuída ao sistema em um aplicativo Web.
  • Adicionar permissões da Microsoft Graph API a uma identidade gerida.
  • Ligue ao Microsoft Graph a partir de uma aplicação web usando identidades geridas.

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

Pré-requisitos

  • Uma aplicação web a correr em Azure App Service que tem ativado o módulo de autenticação/autorização App Service.

Habilitar identidade gerenciada no aplicativo

Se criar e publicar a sua aplicação web através do Visual Studio, a identidade gerida é ativada automaticamente na sua aplicação.

  1. No seu serviço de aplicação, selecione Identidade no painel esquerdo e, em seguida, selecione Sistema atribuído.

  2. Verifique se Status está definido como Ativado.

    Se não, defina para Ligado, depois selecione Guardar e depois selecione Sim para ativar a identidade gerida atribuída pelo sistema. Quando a identidade gerenciada é habilitada, o status é definido como Ativado e a ID do objeto está disponível.

  3. Toma nota do valor do ID do Objeto , que precisas na secção seguinte.

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

Conceder acesso ao Microsoft Graph

Ao aceder ao Microsoft Graph, a identidade gerida precisa de ter as permissões adequadas para a operação que pretende realizar. Atualmente, não existe a opção de atribuir essas permissões através do Microsoft Entra admin center.

  1. Execute o script seguinte para adicionar as permissões solicitadas da Microsoft Graph API ao objeto principal de serviço de identidade gerida.

    # 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 executares o script, verifica no centro de administração do Microsoft Entra que as permissões da API solicitadas estão atribuídas à identidade gerida.

  3. Vá para Aplicações. Este painel apresenta todos os principais de serviço no seu inquilino. Selecione Adicionar filtros e depois introduza o tipo de aplicação==Identidades geridas.

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

    Se está a seguir este tutorial, existem dois princípios de serviço com o mesmo nome de visualização, o secureWebApp, por exemplo. A principal de serviço que tem um URL da página inicial representa o aplicativo Web do tenant. O serviço principal que aparece em Identidades Geridas não deve ter uma URL da Página Inicial listada, e o ID do Objeto deve corresponder ao valor do ID do objeto da identidade gerida na secção anterior.

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

    Captura de ecrã que mostra a opção Todas as aplicações.

  6. Em Visão Geral, selecione Permissões. Vê as permissões adicionais para o Microsoft Graph.

    Captura de ecrã que mostra o painel de Permissões.

Chame Microsoft Graph

As classes ChainedTokenCredential, ManagedIdentityCredential e EnvironmentCredential são usadas para obter uma credencial token para o seu código autorizar pedidos 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 de 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, consulte:

Instalar o pacote de biblioteca cliente Microsoft.Identity.Web.MicrosoftGraph

Instala o Microsoft. Identity.Web.MicrosoftGraph NuGet package no seu projeto usando a interface de linha de comandos .NET Core ou a Package Manager Console em Visual Studio.

.NET Core linha de comandos

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

Consola do Gestor de Pacotes

Abre o projeto/solução em Visual Studio e abre a consola 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

.NET 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 recursos

Se terminares este tutorial e já não precisares da aplicação web ou dos recursos associados, limpa os recursos que criaste.

Eliminar o grupo de recursos

  1. No portal Azure, selecione Grupos de Recursos no menu do portal Azure e selecione o grupo de recursos que contém o seu serviço de aplicação e plano de serviços de aplicação.

  2. Selecione Excluir grupo de recursos para excluir o grupo de recursos e todos os recursos.

    Captura de ecrã que mostra a eliminação do grupo de recursos.

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

Este processo pode demorar vários minutos a ser executado.

Neste tutorial, ficou a saber como:

  • Crie uma identidade gerenciada atribuída ao sistema em um aplicativo Web.
  • Adicionar permissões da Microsoft Graph API a uma identidade gerida.
  • Ligue ao Microsoft Graph a partir de uma aplicação web usando identidades geridas.

Aprenda a ligar uma aplicação Core .NET ou uma aplicação Node.js a uma base de dados.