Esercizio - Implementare l'autenticazione interattiva usando MSAL.NET
In questo esercizio si apprenderà come eseguire le azioni seguenti:
- Registrare un'applicazione con Microsoft Identity Platform
- Usare la classe
PublicClientApplicationBuilder
in MSAL.NET - Acquisire un token in modo interattivo in un'applicazione console
Prerequisiti
- Un account Azure con una sottoscrizione attiva. Se non è già disponibile, è possibile iscriversi per ottenere una versione di valutazione gratuita all'indirizzo https://azure.com/free
- Visual Studio Code: È possibile installare Visual Studio Code da https://code.visualstudio.com.
- Versione di .NET SDK https://dotnet.microsoft.com/download/dotnet (6.0, 7.0 o 8.0)
Registrare una nuova applicazione
Accedere al portale: https://portal.azure.com
Cerca e seleziona ID Microsoft Entra.
In Gestisci, selezionare Registrazioni dell'app>Nuova registrazione.
Quando viene visualizzata la pagina Registra un'applicazione, immettere le informazioni di registrazione dell'applicazione:
Campo Valore Nome az204appreg
tipi di account supportati Seleziona solo gli account in questa directory organizzativa URI di reindirizzamento (facoltativo) Selezionare client pubblico/nativo (desktop & mobile) e immettere http://localhost
nella casella a destra.Selezionare Registra.
Microsoft Entra ID assegna un ID univoco per l'applicazione (client) alla tua app e vieni indirizzato alla pagina di panoramica dell'applicazione.
Configurare l'applicazione console
Avviare Visual Studio Code e aprire un terminale selezionando Terminale e quindi Nuovo terminale.
Creare una cartella per il progetto ed entrare nella cartella.
md az204-auth cd az204-auth
Creare l'app console .NET.
dotnet new console
Aprire la cartella az204-auth in Visual Studio Code.
code . -r
Compilare l'app console
In questa sezione si aggiungono i pacchetti e il codice necessari al progetto.
Aggiungere pacchetti e istruzioni using
Aggiungere il pacchetto
Microsoft.Identity.Client
al progetto in un terminale in Visual Studio Code.dotnet add package Microsoft.Identity.Client
Aprire il file Program.cs e aggiungere istruzioni
using
per includereMicrosoft.Identity.Client
e abilitare le operazioni asincrone.using System.Threading.Tasks; using Microsoft.Identity.Client;
Modificare il metodo Main per abilitare async.
public static async Task Main(string[] args)
Aggiungere codice per l'autenticazione interattiva
Sono necessarie due variabili per contenere gli ID applicazione (client) e directory (tenant). È possibile copiare questi valori dal portale. Aggiungere il seguente codice e sostituire i valori stringa con i valori appropriati dal portale.
private const string _clientId = "APPLICATION_CLIENT_ID"; private const string _tenantId = "DIRECTORY_TENANT_ID";
Usare la classe
PublicClientApplicationBuilder
per compilare il contesto di autorizzazione.var app = PublicClientApplicationBuilder .Create(_clientId) .WithAuthority(AzureCloudInstance.AzurePublic, _tenantId) .WithRedirectUri("http://localhost") .Build();
Codice Descrizione .Create
Crea un PublicClientApplicationBuilder
da un clientID..WithAuthority
Aggiunge un'autorità nota corrispondente a un server ADFS. Nel codice stiamo specificando il cloud pubblico e utilizzando il tenant per l'app che abbiamo registrato.
Acquisire un token
Quando hai registrato l'app az204appreg, è stata generata automaticamente un'autorizzazione API user.read
per Microsoft Graph. Utilizzi tale autorizzazione per acquisire un token.
Impostare l'ambito di autorizzazione per la richiesta di token. Aggiungere il codice seguente sotto il
PublicClientApplicationBuilder
.string[] scopes = { "user.read" };
Aggiungere il codice per richiedere il token e scrivere il risultato nella console.
AuthenticationResult result = await app.AcquireTokenInteractive(scopes).ExecuteAsync(); Console.WriteLine($"Token:\t{result.AccessToken}");
Esaminare l'applicazione completata
Il contenuto del file Program.cs dovrebbe essere simile all'esempio seguente:
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}");
}
}
}
Eseguire l'applicazione
Nel terminale di Visual Studio Code eseguire
dotnet build
per verificare la presenza di errori, quindidotnet run
eseguire l'app.L'app apre il browser predefinito che richiede di selezionare l'account con cui si vuole eseguire l'autenticazione. Se sono elencati più account, selezionare quello associato al tenant usato nell'app.
Se questa è la prima volta che ci si è autenticati nell'app registrata, si riceve una notifica di autorizzazioni richieste che ti chiede di approvare l'app per leggere i dati associati al tuo account. Selezionare Accetta.
I risultati dovrebbero essere simili all'esempio seguente nella console.
Token: eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVhU.....