Esercizio - Implementare l'autenticazione interattiva usando MSAL.NET

Completato

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

Registrare una nuova applicazione

  1. Accedere al portale: https://portal.azure.com

  2. Cerca e seleziona ID Microsoft Entra.

  3. In Gestisci, selezionare Registrazioni dell'app>Nuova registrazione.

  4. 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.
  5. 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

  1. Avviare Visual Studio Code e aprire un terminale selezionando Terminale e quindi Nuovo terminale.

  2. Creare una cartella per il progetto ed entrare nella cartella.

    md az204-auth
    cd az204-auth
    
  3. Creare l'app console .NET.

    dotnet new console
    
  4. 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

  1. Aggiungere il pacchetto Microsoft.Identity.Client al progetto in un terminale in Visual Studio Code.

    dotnet add package Microsoft.Identity.Client
    
  2. Aprire il file Program.cs e aggiungere istruzioni using per includere Microsoft.Identity.Client e abilitare le operazioni asincrone.

    using System.Threading.Tasks;
    using Microsoft.Identity.Client;
    
  3. Modificare il metodo Main per abilitare async.

    public static async Task Main(string[] args)
    

Aggiungere codice per l'autenticazione interattiva

  1. 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";
    
  2. 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.

  1. Impostare l'ambito di autorizzazione per la richiesta di token. Aggiungere il codice seguente sotto il PublicClientApplicationBuilder.

    string[] scopes = { "user.read" };
    
  2. 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

  1. Nel terminale di Visual Studio Code eseguire dotnet build per verificare la presenza di errori, quindi dotnet run eseguire l'app.

  2. 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.

  3. 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.

    Selezionare **Accetta** per concedere l'autorizzazione.

  4. I risultati dovrebbero essere simili all'esempio seguente nella console.

    Token:  eyJ0eXAiOiJKV1QiLCJub25jZSI6IlVhU.....