Tutorial: Acceso a Microsoft Graph desde una aplicación .NET protegida como aplicación
Aprenda a acceder a Microsoft Graph desde una aplicación web que se ejecuta en Azure App Service.
Quiere llamar a Microsoft Graph para la aplicación web. Una manera segura de dar acceso a los datos a la aplicación web es usar una identidad administrada asignada por el sistema. Una identidad administrada de Microsoft Entra ID permite a App Service acceder a los recursos a través del control de acceso basado en roles, sin necesidad de credenciales de aplicación. Después de asignar una identidad administrada a la aplicación web, Azure se encarga de la creación y distribución de un certificado. No tiene que preocuparse de administrar secretos ni credenciales de aplicaciones.
En este tutorial, aprenderá a:
- Crear una identidad administrada asignada por el sistema en una aplicación web.
- Agregar permisos de Microsoft Graph API a una identidad administrada.
- Llamar a Microsoft Graph desde una aplicación web mediante identidades administradas.
Si no tiene una suscripción a Azure, cree una cuenta gratuita de Azure antes de empezar.
Requisitos previos
- Una aplicación web que se ejecuta en Azure App Service que tiene el módulo de autenticación y autorización de App Service habilitado.
Habilitación de la identidad administrada en la aplicación
Si crea y publica la aplicación web mediante Visual Studio, habilitará la identidad administrada en la aplicación.
En App Service, seleccione Identidad en el panel izquierdo y, a continuación, Asignado por el sistema.
Compruebe que la opción Estado está establecida en Activo. Si no es así, seleccione Guardar y, a continuación, Sí para habilitar la identidad administrada asignada por el sistema. Una vez habilitada la identidad administrada, el estado se establece en Activo y el identificador del objeto está disponible.
Tome nota del valor de Id. de objeto, ya que lo necesitará en el paso siguiente.
Concesión de acceso a Microsoft Graph
Al acceder a Microsoft Graph, la identidad administrada debe tener los permisos adecuados para la operación que desea realizar. Actualmente, no hay ninguna opción para asignar estos permisos mediante el Centro de administración de Microsoft Entra.
Ejecute el siguiente script para agregar los permisos de Microsoft Graph API solicitados al objeto de la entidad de servicio de la identidad administrada.
# 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
Después de ejecutar el script, puede comprobar en el Centro de administración de Microsoft Entra que los permisos de API solicitados están asignados a la identidad administrada.
Vaya a Aplicaciones y, a continuación, Aplicaciones empresariales. Este panel muestra todas las entidades de servicio del inquilino. Agregue un filtro para "Tipo de aplicación==Identidades administradas" y seleccione la entidad de servicio para la identidad administrada.
Si sigue este tutorial, hay dos entidades de servicio con el mismo nombre para mostrar (SecureWebApp2020094113531, por ejemplo). La entidad de servicio que tiene una dirección URL de la página principal representa la aplicación web en su inquilino. La entidad de servicio que aparece en Identidades administradasno debe tener una dirección URL de página principal enumerada y el valor de Id. de objeto debe coincidir con el valor del identificador de objeto de la identidad administrada del paso anterior.
Seleccione la entidad de servicio para la identidad administrada.
En Información general, seleccione Permisos; verá los permisos agregados para Microsoft Graph.
Llamada a Microsoft Graph
Las clases ChainedTokenCredential, ManagedIdentityCredential y EnvironmentCredential se usan para obtener una credencial de token para el código a fin de autorizar las solicitudes a Microsoft Graph. Cree una instancia de la clase ChainedTokenCredential, que usa la identidad administrada en el entorno de App Service o las variables de entorno de desarrollo para capturar tokens y adjuntarlos al cliente de servicio. En el ejemplo de código siguiente se obtiene la credencial de token autenticada y se usa para crear un objeto de cliente del servicio que, luego, obtiene los usuarios del grupo.
Para ver este código como parte de una aplicación de ejemplo, consulte el:
Instalación del paquete de la biblioteca cliente Microsoft.Identity.Web.MicrosoftGraph
Instale el paquete NuGet Microsoft.Identity.Web.MicrosoftGraph en el proyecto utilizando la interfaz de la línea de comandos de .NET Core o la consola del administrador de paquetes de Visual Studio.
Línea de comandos de .NET Core
Abra una línea de comandos y cambie al directorio que contiene el archivo del proyecto.
Ejecute los comandos de instalación.
dotnet add package Microsoft.Identity.Web.MicrosoftGraph
dotnet add package Microsoft.Graph
Consola del Administrador de paquetes
Abra el proyecto o la solución en Visual Studio y abra la consola mediante Herramientas>Administrador de paquetes NuGet>Consola del Administrador de paquetes.
Ejecute los comandos de instalación.
Install-Package Microsoft.Identity.Web.MicrosoftGraph
Install-Package Microsoft.Graph
Ejemplo 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;
}
Limpieza de recursos
Si ya ha terminado con este tutorial y no necesita la aplicación web ni los recursos asociados, elimine los recursos que creó.
Eliminar el grupo de recursos
En Azure Portal, seleccione Grupos de recursos en el menú del portal y seleccione el grupo de recursos que contenga su instancia de App Service y el plan de esta.
Seleccione Eliminar grupo de recursos para eliminar el grupo de recursos y todos los recursos.
Este comando puede tardar varios minutos en ejecutarse.
Pasos siguientes
En este tutorial, ha aprendido a:
- Crear una identidad administrada asignada por el sistema en una aplicación web.
- Agregar permisos de Microsoft Graph API a una identidad administrada.
- Llamar a Microsoft Graph desde una aplicación web mediante identidades administradas.
Aprenda a conectar una aplicación de .NET Core, Python, Java o Node.js a una base de datos.