Inicio rápido: Adquisición de un token y llamada a Microsoft Graph API mediante una identidad de aplicación de consola

¡Bienvenido! Probablemente esta no sea la página que esperaba. Mientras trabajamos en una corrección, este vínculo debería llevarle al artículo correcto:

Inicio rápido: Adquisición de un token y llamada a Microsoft Graph en una aplicación de consola de .NET

Lamentamos las molestias y agradecemos su paciencia mientras trabajamos para resolverlo.

Este inicio rápido usa un código de ejemplo que muestra cómo una aplicación de consola de .NET puede obtener un token de acceso para llamar a Microsoft Graph API y mostrar una lista de usuarios del directorio. También se muestra cómo se puede ejecutar un trabajo o un servicio de Windows con una identidad de aplicación, en lugar de la identidad de un usuario. La aplicación de consola de ejemplo de este inicio rápido también es una aplicación demonio, por lo que es una aplicación cliente confidencial.

Requisitos previos

Requisito mínimo del SDK de NET 6.0.

Descarga y configuración de la aplicación de inicio rápido

Paso 1: Configuración de la aplicación en Azure Portal

Para que el ejemplo de código de este inicio rápido funcione, cree un secreto de cliente y agregue el permiso de aplicación User.Read.All de Graph API.

Ya configurada La aplicación está configurada con estos atributos.

Paso 2: Descarga del proyecto de Visual Studio

Ejecute el proyecto con Visual Studio 2022.

Sugerencia

Se recomienda extraer el archivo o clonar el repositorio en un directorio próximo a la raíz de la unidad para evitar los errores provocados por las limitaciones de longitud de la ruta de acceso en Windows.

Nota:

Enter_the_Supported_Account_Info_Here

La ejecución de la aplicación ahora da como resultado la salida HTTP 403 - Forbidden* error: "Insufficient privileges to complete the operation. Este error se produce porque cualquier permiso de solo aplicación requiere un administrador global del directorio para dar su consentimiento a la aplicación. Seleccione una de las opciones siguientes según el rol.

Administrador de inquilinos global

Para un administrador global de inquilinos, vaya a la página Permisos de API y seleccione Conceder consentimiento de administrador para Enter_the_Tenant_Name_Here.

Usuario estándar

Para un usuario estándar del inquilino, pida a un administrador global que dé consentimiento de administrador a la aplicación. Para ello, proporcione la siguiente dirección URL al administrador:

https://login.microsoftonline.com/Enter_the_Tenant_Id_Here/adminconsent?client_id=Enter_the_Application_Id_Here

Es posible que después de conceder consentimiento a la aplicación mediante la URL anterior, aparezca el error AADSTS50011: No reply address is registered for the application. Este error se produce porque la aplicación y la dirección URL no tienen un URI de redirección. Esto se puede omitir.

Paso 4: Ejecución de la aplicación

En Visual Studio, presione F5 para ejecutar la aplicación. De lo contrario, ejecute la aplicación mediante el símbolo del sistema, la consola o el terminal:

cd {ProjectFolder}\1-Call-MSGraph\daemon-console
dotnet run

En el código:

  • {ProjectFolder} es la carpeta donde extrajo el archivo zip. Un ejemplo es C:\Azure-Samples\active-directory-dotnetcore-daemon-v2.

Como resultado, debe mostrarse una lista de usuarios en Microsoft Entra ID.

Esta aplicación de inicio rápido usa un secreto de cliente para identificarse como un cliente confidencial. El secreto de cliente se agrega como un archivo de texto sin formato a los archivos de proyecto. Por razones de seguridad, se recomienda utilizar un certificado en lugar de un secreto de cliente antes de considerar la aplicación como una aplicación de producción. Para más información sobre cómo usar un certificado, consulte estas instrucciones.

Más información

En esta sección, se proporciona una introducción al código necesario para el inicio de sesión de usuarios. Esta introducción puede ser útil para comprender cómo funciona el código >, cuáles son los argumentos principales y cómo agregar el inicio de sesión a una aplicación de consola de .NET existente.

Funcionamiento del ejemplo

Diagrama que muestra el funcionamiento de la aplicación de ejemplo que se ha generado en este inicio rápido.

Microsoft.Identity.Web.GraphServiceClient

Web de Microsoft Identity (en el paquete Microsoft.Identity.Web.TokenAcquisition) es la biblioteca que se usa para solicitar tokens para acceder a una API protegida por la plataforma de identidad de Microsoft. En este inicio rápido se solicitan tokens mediante la propia identidad de la aplicación, en lugar de permisos delegados. El flujo de autenticación usado en este caso se conoce como flujo de OAuth de credenciales de cliente. Para más información sobre cómo usar MSAL.NET con el flujo de credenciales de cliente, consulte este artículo. Dado que la aplicación demonio en este inicio rápido llama a Microsoft Graph, se instala el paquete Microsoft.Identity.Web.GraphServiceClient, que controla las solicitudes autenticadas automáticamente en Microsoft Graph (y hace referencia a sí misma Microsoft.Identity.Web.TokenAcquisition)

Microsoft.Identity.Web.GraphServiceClient se puede instalar ejecutando el siguiente comando en la consola del Administrador de paquetes de Visual Studio:

dotnet add package Microsoft.Identity.Web.GraphServiceClient

Inicialización de aplicaciones

Agregue la referencia para Microsoft.Identity.Web agregando el siguiente código:

using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.DependencyInjection;
using Microsoft.Graph;
using Microsoft.Identity.Abstractions;
using Microsoft.Identity.Web;

A continuación, inicialice la aplicación con lo siguiente:

// Get the Token acquirer factory instance. By default it reads an appsettings.json
// file if it exists in the same folder as the app (make sure that the 
// "Copy to Output Directory" property of the appsettings.json file is "Copy if newer").
TokenAcquirerFactory tokenAcquirerFactory = TokenAcquirerFactory.GetDefaultInstance();

// Configure the application options to be read from the configuration
// and add the services you need (Graph, token cache)
IServiceCollection services = tokenAcquirerFactory.Services;
services.AddMicrosoftGraph();
// By default, you get an in-memory token cache.
// For more token cache serialization options, see https://aka.ms/msal-net-token-cache-serialization

// Resolve the dependency injection.
var serviceProvider = tokenAcquirerFactory.Build();

Este código usa la configuración definida en el archivo appsettings.json:

{
   "AzureAd": {
       "Instance": "https://login.microsoftonline.com/",
       "TenantId": "[Enter here the tenantID or domain name for your Azure AD tenant]",
       "ClientId": "[Enter here the ClientId for your application]",
       "ClientCredentials": [
           {
              "SourceType": "ClientSecret",
              "ClientSecret": "[Enter here a client secret for your application]"
           }
       ]
   }
}
Elemento Descripción
ClientSecret Es el secreto de cliente creado para la aplicación en Azure Portal.
ClientId Es el identificador de aplicación (cliente) de la aplicación registrada en Azure Portal. Este valor se puede encontrar en la página Información general de la aplicación en el Azure Portal.
Instance (Opcional) El servicio de token de seguridad (STS) podría instanciar el punto de conexión para que la aplicación se autentique. Normalmente, es https://login.microsoftonline.com/ para la nube pública.
TenantId Nombre del inquilino o el identificador de inquilino.

Para más información, consulte la documentación de referencia de ConfidentialClientApplication.

Llamada a Microsoft Graph

Para solicitar un token mediante la identidad de la aplicación, use el método AcquireTokenForClient:

GraphServiceClient graphServiceClient = serviceProvider.GetRequiredService<GraphServiceClient>();
var users = await graphServiceClient.Users
              .GetAsync(r => r.Options.WithAppOnly());

Ayuda y soporte técnico

Si necesita ayuda, desea informar de un problema o desea obtener información sobre las opciones de soporte técnico, consulte Opciones de ayuda y soporte técnico para desarrolladores.

Pasos siguientes

Para más información sobre las aplicaciones demonio, consulte la información general del escenario: