Ejercicio: Implementación de la autenticación interactiva mediante MSAL.NET
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
- Una cuenta de Azure con una suscripción activa. Si aún no tiene una, puede solicitar una prueba gratuita en https://azure.com/free.
- Visual Studio Code: puede instalar Visual Studio Code desde https://code.visualstudio.com.
- Una versión del SDK de .NET https://dotnet.microsoft.com/download/dotnet (6.0, 7.0 o 8.0)
Registro de una nueva aplicación
Inicie sesión en el portal: https://portal.azure.com.
Busque y seleccione Microsoft Entra ID.
En Administrar, seleccione Registros de aplicaciones> y, luego, Nuevo registro.
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.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
Inicie Visual Studio Code y abra un terminal seleccionando Terminal y, a continuación, Nuevo terminal.
Cree una carpeta para el proyecto y vaya a la carpeta.
md az204-auth cd az204-auth
Cree la aplicación de consola de .NET.
dotnet new console
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
Agregue el paquete
Microsoft.Identity.Client
al proyecto en un terminal en Visual Studio Code.dotnet add package Microsoft.Identity.Client
Abra el archivo Program.cs y agregue instrucciones
using
para incluirMicrosoft.Identity.Client
y habilitar las operaciones asíncronas.using System.Threading.Tasks; using Microsoft.Identity.Client;
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
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";
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.
Establezca el ámbito de permiso para la solicitud de token. Agregue el código siguiente bajo
PublicClientApplicationBuilder
.string[] scopes = { "user.read" };
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
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.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.
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.
Debería ver resultados similares al ejemplo siguiente en la consola.
Token: eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVhU.....