Ejercicio: Implementación de la autenticación interactiva mediante MSAL.NET

Completado

En este ejercicio aprenderá a realizar las siguientes acciones:

  • Registro de una aplicación con la plataforma de identidad de Microsoft
  • Usar la clase PublicClientApplicationBuilder en MSAL.NET
  • Adquisición de un token de forma interactiva en una aplicación de consola

Prerrequisitos

Registro de una nueva aplicación

  1. Inicie sesión en el portal: https://portal.azure.com

  2. Busque y seleccione ID de Microsoft Entra.

  3. En Administrar, seleccione Registros de aplicaciones>Nuevo registro.

  4. Cuando aparezca la página de registro de la aplicación , escriba la información de registro de su aplicación:

    Campo Valor
    Nombre az204appreg
    tipos de cuenta admitidos Seleccione Cuentas en este directorio organizativo solo
    URI de redirección (opcional) Seleccione cliente nativo/público (móvil de escritorio &) y escriba http://localhost en el cuadro de la derecha.
  5. Seleccione Registro.

Microsoft Entra ID asigna un identificador de aplicación (cliente) único a tu aplicación y se le redirige a la página Información general de la aplicación.

Configuración de la aplicación de consola

  1. Inicie Visual Studio Code y abra un terminal seleccionando Terminal y, a continuación, Nuevo terminal.

  2. Cree una carpeta para el proyecto y acceda a esa carpeta.

    md az204-auth
    cd az204-auth
    
  3. Cree la aplicación de consola de .NET.

    dotnet new console
    
  4. Abra la carpeta az204-auth en Visual Studio Code.

    code . -r
    

Compilación de la aplicación de consola

En esta sección, agregará los paquetes y el código necesarios al proyecto.

Agregar paquetes y declaraciones using

  1. Agregue el paquete Microsoft.Identity.Client al proyecto en un terminal de Visual Studio Code.

    dotnet add package Microsoft.Identity.Client
    
  2. Abra el archivo Program.cs y agregue instrucciones using para incluir Microsoft.Identity.Client y habilitar operaciones asincrónicas.

    using System.Threading.Tasks;
    using Microsoft.Identity.Client;
    
  3. Cambie el método Main para habilitar async.

    public static async Task Main(string[] args)
    

Adición de código para la autenticación interactiva

  1. Necesita dos variables para contener los identificadores de aplicación (cliente) y directorio (inquilino). Puede copiar esos valores desde el portal. Agregue el código siguiente y reemplace los valores de cadena por los valores adecuados del portal.

    private const string _clientId = "APPLICATION_CLIENT_ID";
    private const string _tenantId = "DIRECTORY_TENANT_ID";
    
  2. Use la clase PublicClientApplicationBuilder para crear el contexto de autorización.

    var app = PublicClientApplicationBuilder
        .Create(_clientId)
        .WithAuthority(AzureCloudInstance.AzurePublic, _tenantId)
        .WithRedirectUri("http://localhost")
        .Build();
    
    Código Descripción
    .Create Crea un PublicClientApplicationBuilder a partir de un ID de cliente.
    .WithAuthority Agrega una autoridad conocida correspondiente a un servidor ADFS. En el código especificamos la nube pública y utilizamos el entorno del servicio para la aplicación que hemos registrado.

Adquisición de un token

Cuando registró el az204appreg aplicación, generó automáticamente un user.read de permisos de API para Microsoft Graph. Tú usas dicho permiso para adquirir un token.

  1. Establezca el ámbito de permiso para la solicitud de token. Agregue el código siguiente debajo del PublicClientApplicationBuilder.

    string[] scopes = { "user.read" };
    
  2. Agregue código para solicitar el token y escribir el resultado en la consola.

    AuthenticationResult result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();
    
    Console.WriteLine($"Token:\t{result.AccessToken}");
    

Revisión de la aplicación completada

El contenido del archivo Program.cs debe ser similar al ejemplo siguiente:

using System;
using System.Threading.Tasks;
using Microsoft.Identity.Client;

namespace az204_auth
{
    class Program
    {
        private const string _clientId = "APPLICATION_CLIENT_ID";
        private const string _tenantId = "DIRECTORY_TENANT_ID";

        public static async Task Main(string[] args)
        {
            var app = PublicClientApplicationBuilder
                .Create(_clientId)
                .WithAuthority(AzureCloudInstance.AzurePublic, _tenantId)
                .WithRedirectUri("http://localhost")
                .Build(); 
            string[] scopes = { "user.read" };
            AuthenticationResult result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();

            Console.WriteLine($"Token:\t{result.AccessToken}");
        }
    }
}

Ejecución de la aplicación

  1. En el terminal de Visual Studio Code, ejecute dotnet build para comprobar si hay errores y, a continuación, dotnet run para ejecutar la aplicación.

  2. La aplicación abre el explorador predeterminado que le pide que seleccione la cuenta con la que desea autenticarse. Si hay varias cuentas en la lista, seleccione la asociada al inquilino usado en la aplicación.

  3. Si esta es la primera vez que ha iniciado sesión en la aplicación registrada, recibirá una notificación de Permisos solicitados que le pide aprobar la aplicación para que pueda leer los datos asociados a su cuenta. Seleccione Aceptar.

    Seleccione **Aceptar** para conceder el permiso.

  4. Debería ver los resultados similares al ejemplo siguiente en la consola.

    Token:  eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVhU.....