Partilhar via


Tutorial: Acesse o Microsoft Graph a partir de um aplicativo .NET seguro como o aplicativo

Saiba como aceder ao Microsoft Graph a partir de uma aplicação Web em execução no Serviço de Aplicações do Azure.

Diagrama que mostra o acesso ao Microsoft Graph.

Você deseja chamar o Microsoft Graph para o aplicativo Web. Uma maneira segura de dar ao seu aplicativo Web acesso aos dados é usar uma identidade gerenciada atribuída ao sistema. Uma identidade gerenciada do Microsoft Entra ID permite que o Serviço de Aplicativo acesse recursos por meio do RBAC (controle de acesso baseado em função), sem exigir credenciais do aplicativo. Depois de atribuir uma identidade gerenciada ao seu aplicativo Web, o Azure cuida 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.
  • Adicione permissões da API do Microsoft Graph a uma identidade gerenciada.
  • Chame o Microsoft Graph de um aplicativo Web usando identidades gerenciadas.

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

Pré-requisitos

Habilitar identidade gerenciada no aplicativo

Se você criar e publicar seu aplicativo Web por meio do Visual Studio, a identidade gerenciada será habilitada em seu aplicativo para você.

  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. Caso contrário, selecione Salvar e, em seguida, selecione 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 está disponível.

  3. Anote o valor de ID do objeto, que você precisará na próxima etapa.

Captura de tela que mostra a identidade atribuída ao 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á opção para atribuir essas permissões por meio do centro de administração do Microsoft Entra.

  1. Execute o script a seguir para adicionar as permissões solicitadas da API do Microsoft Graph ao objeto principal do serviço de identidade gerenciado.

    # 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, você pode verificar no centro de administração do Microsoft Entra se as permissões de API solicitadas estão atribuídas à identidade gerenciada.

  3. Vá para Aplicativos e selecione Aplicativos corporativos. Este painel apresenta todas as entidades de serviço no seu inquilino. 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, há duas entidades de serviço com o mesmo nome para exibição (SecureWebApp2020094113531, por exemplo). A entidade de serviço que tem um URL da página inicial representa o aplicativo Web em seu locatário. A entidade de serviço que aparece em Identidades Gerenciadas não deve ter uma URL da Página Inicial listada e a ID do Objeto deve corresponder ao valor da ID do objeto da identidade gerenciada na etapa anterior.

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

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

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

    Captura de tela que mostra o painel Permissões.

Ligue para o Microsoft Graph

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

Instale o pacote de 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 .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

Consola do Gestor de Pacotes

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 do .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;
}

Clean up resources (Limpar recursos)

Se você tiver terminado este tutorial e não precisar mais do aplicativo Web ou dos recursos associados, limpe os recursos criados.

Eliminar 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 de serviço de aplicativo.

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

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

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

Próximos passos

Neste tutorial, ficou a saber como:

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

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