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.
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
- Um aplicativo Web em execução no Serviço de Aplicativo do Azure que tem o módulo de autenticação/autorização do Serviço de Aplicativo habilitado.
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.
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.
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
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 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.
Selecione a entidade de serviço para a identidade gerenciada.
Em Visão geral, selecione Permissões e você verá as permissões adicionadas ao Microsoft Graph.
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.
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.