Inicio rápido: Llamar a Microsoft Graph API desde una aplicación de la Plataforma universal de Windows (UWP)

¡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: Aplicación de escritorio para la Plataforma universal de Windows (UWP) con inicio de sesión de usuario

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

En este inicio rápido descargará y ejecutará un código de ejemplo que muestra cómo una aplicación de Plataforma universal de Windows puede realizar el inicio de sesión de usuarios y obtener un token de acceso para llamar a Microsoft Graph API.

Para ilustrar este tema, consulte el apartado en el que se explica el funcionamiento del ejemplo.

Prerrequisitos

Paso 1: Configuración de la aplicación

Para que el código de ejemplo de este inicio rápido funcione, agregue un URI de redirección de https://login.microsoftonline.com/common/oauth2/nativeclient.

Already configured La aplicación está configurada con estos atributos.

Paso 2: Descargue el proyecto de Visual Studio

Ejecute el proyecto con Visual Studio 2019.

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.

Paso 3: La aplicación está configurada y lista para ejecutarse

Hemos configurado el proyecto con los valores de las propiedades de su aplicación y está preparado para ejecutarse.

Paso 4: Ejecución de la aplicación

Para ejecutar la aplicación de ejemplo en la máquina local:

  1. En la barra de herramientas de Visual Studio, elija la plataforma correcta (probablemente x64 o x86, no ARM). El dispositivo de destino debería cambiar de Dispositivoa Máquina local.

  2. Seleccione Depurar>Iniciar sin depurar.

    Si se le pide, es posible que deba habilitar Developer Mode (Modo de desarrollador) antes de habilitar Iniciar sin depurar de nuevo para iniciar la aplicación.

Cuando aparezca la ventana de la aplicación, podrá seleccionar el botón Call Microsoft Graph API (Llamar a Microsoft Graph API), escribir sus credenciales y dar su consentimiento a los permisos solicitados por la aplicación. Si esto se realiza correctamente, la aplicación muestra algunos datos del token y otros obtenidos de la llamada a Microsoft Graph API.

Funcionamiento del ejemplo

Shows how the sample app generated by this quickstart works

MSAL.NET

MSAL (Microsoft.Identity.Client) es la biblioteca utilizada para iniciar sesión con usuarios y solicitar tokens de seguridad. Los tokens de seguridad se utilizan para acceder a una API protegida por la plataforma de identidad de Microsoft. Puede instalar MSAL mediante la ejecución del siguiente comando en la Consola del Administrador de paquetes de Visual Studio:

Install-Package Microsoft.Identity.Client

Inicialización de MSAL

Puede agregar la referencia de MSAL con el código siguiente:

using Microsoft.Identity.Client;

A continuación, se inicializa MSAL con el código siguiente:

public static IPublicClientApplication PublicClientApp;
PublicClientApp = PublicClientApplicationBuilder.Create(ClientId)
                                                .WithRedirectUri("https://login.microsoftonline.com/common/oauth2/> nativeclient")
                                                    .Build();

El valor de ClientId es el de Id. del cliente de aplicación de la aplicación que ha registrado en Azure Portal. Puede encontrar este valor en la página Información general de la aplicación en Azure Portal.

Solicitud de tokens

MSAL tiene dos métodos para adquirir tokens en una aplicación de UWP: AcquireTokenInteractive y AcquireTokenSilent.

Obtención de un token de usuario interactivamente

En algunas situaciones, es necesario forzar a los usuarios a interactuar con la Plataforma de identidad de Microsoft mediante una ventana emergente para validar sus credenciales o dar su consentimiento. Estos son algunos ejemplos:

  • La primera vez que los usuarios inician sesión en la aplicación
  • Cuando los usuarios deben volver a escribir sus credenciales porque la contraseña expiró
  • Cuando la aplicación solicita acceso a un recurso para el cual el usuario necesita dar su consentimiento
  • Cuando se requiere la autenticación en dos fases
authResult = await App.PublicClientApp.AcquireTokenInteractive(scopes)
                      .ExecuteAsync();

El parámetro scopes contiene los ámbitos que se solicitan, como { "user.read" } para Microsoft Graph o { "api://<Application ID>/access_as_user" } para las API web personalizadas.

Obtención de un token de usuario en silencio

Use el método AcquireTokenSilent para obtener tokens que permiten obtener acceso a recursos protegidos después del método AcquireTokenInteractive inicial. No es recomendable pedirle al usuario que valide sus credenciales cada vez que necesite obtener acceso a un recurso. La mayor parte del tiempo, se espera que la renovación y adquisición de tokens se produzca sin ninguna interacción por parte del usuario.

var accounts = await App.PublicClientApp.GetAccountsAsync();
var firstAccount = accounts.FirstOrDefault();
authResult = await App.PublicClientApp.AcquireTokenSilent(scopes, firstAccount)
                                      .ExecuteAsync();
  • scopes contiene los ámbitos que se solicitan, como { "user.read" } para Microsoft Graph o { "api://<Application ID>/access_as_user" } para las API web personalizadas.
  • firstAccount especifica la primera cuenta de usuario en la memoria caché (MSAL admite varios usuarios en una sola aplicación).

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

Visite el tutorial de escritorio de Windows para acceder a una guía completa paso a paso sobre la creación de aplicaciones y nuevas características, que incluye una explicación completa de esta guía de inicio rápido.