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 en la plataforma de identidad de Microsoft
  • Uso de 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 Microsoft Entra ID.

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

  4. Cuando aparece la página Registrar una aplicación, escriba la información de registro de la aplicación:

    Campo Valor
    Nombre az204appreg
    Tipos de cuenta admitidos Seleccione Solo las cuentas de este directorio organizativo.
    URI de redireccionamiento (opcional) Seleccione Cliente público o nativo (móvil y escritorio) y escriba http://localhost en el cuadro de la derecha.
  5. Seleccione Registrar.

Microsoft Entra ID le asigna un identificador de aplicación único (cliente) a la aplicación y le lleva 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 vaya a la 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.

Adición de paquetes e instrucciones using

  1. Agregue el paquete Microsoft.Identity.Client al proyecto en un terminal en 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 las operaciones asíncronas.

    using System.Threading.Tasks;
    using Microsoft.Identity.Client;
    
  3. Cambie el método Main para habilitar las acciones asincrónicas.

    public static async Task Main(string[] args)
    

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

  1. Se necesitan 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 generar el contexto de autorización.

    var app = PublicClientApplicationBuilder
        .Create(_clientId)
        .WithAuthority(AzureCloudInstance.AzurePublic, _tenantId)
        .WithRedirectUri("http://localhost")
        .Build();
    
    Código Descripción
    .Create Crea PublicClientApplicationBuilder a partir de un clientID.
    .WithAuthority Agrega una autoridad conocida correspondiente a un servidor de ADFS. En el código, vamos a especificar la nube pública y usaremos el inquilino para la aplicación que registramos.

Adquisición de un token

Al registrar la aplicación az204appreg, se generó automáticamente un permiso de API user.read para Microsoft Graph. Usará ese permiso para adquirir un token.

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

    string[] scopes = { "user.read" };
    
  2. Agregue código para solicitar el token y escriba 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 quiere autenticarse. Si hay varias cuentas en la lista, seleccione la asociada al inquilino que se usa en la aplicación.

  3. Si es la primera vez que se autentica en la aplicación registrada, recibirá una notificación de Permisos solicitados que le pide que apruebe que la aplicación lea los datos asociados a su cuenta. Seleccione Aceptar.

    Select **Accept** to grant the permission.

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

    Token:  eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVhU.....