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.
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
- 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 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ê.
No seu serviço de aplicação, selecione Identidade no painel esquerdo e, em seguida, selecione Sistema atribuído.
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.
Anote o valor de ID do objeto, que você precisará na próxima etapa.
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.
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
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.
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.
Selecione a entidade de serviço para a identidade gerenciada.
Em Visão geral, selecione Permissões e você verá as permissões adicionadas para o Microsoft Graph.
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.
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.