Eseguire la migrazione di applicazioni client pubbliche da ADAL.NET a MSAL.NET

Avvertimento

Azure Active Directory Authentication Library (ADAL) è stato deprecato. Anche se le app esistenti che usano ADAL continueranno a funzionare, Microsoft non rilascerà più le correzioni di sicurezza in ADAL. Usare il Libreria di Autenticazione Microsoft (MSAL) per evitare di mettere a rischio la sicurezza dell'app.

Questo articolo descrive come eseguire la migrazione di un'applicazione client pubblica da Azure Active Directory Authentication Library per .NET (ADAL.NET) a Libreria di Autenticazione Microsoft per .NET (MSAL.NET). Le applicazioni client pubbliche sono applicazioni desktop e per dispositivi mobili, inclusi progetti nativi (Win32) e macchine virtuali Windows che chiamano un altro servizio o API per conto di un utente Microsoft Entra ID. Per altre informazioni sulle applicazioni client pubbliche, vedere Flussi di autenticazione e scenari di applicazione.

Passaggi per la migrazione

  1. Trovare il codice usando ADAL.NET nell'app.

    Il codice che utilizza ADAL in un'applicazione client pubblica istanzia AuthenticationContext e chiama un override di AcquireTokenAsync con i parametri seguenti:

    • Una resourceId stringa. Questa variabile è l'URI ID app dell'API Web che si vuole chiamare.
    • Un clientId che è l'identificatore della tua applicazione, noto anche come App ID.
  2. Dopo aver rilevato che sono presenti applicazioni che usano ADAL.NET, installare il pacchetto NuGet MSAL.NET (Microsoft.Identity.Client) e aggiornare i riferimenti alla libreria di progetti. Per altre informazioni, vedere Introduzione a NuGet.

  3. Aggiornare il codice in base allo scenario dell'applicazione client pubblica. Alcuni passaggi sono comuni e si applicano a tutti gli scenari client pubblici. Altri passaggi sono univoci per ogni scenario.

    Gli scenari client pubblici sono:

    • Gestione account Web, l'approccio di autenticazione preferito per le applicazioni Windows, usando il componente broker di autenticazione.
    • Autenticazione interattiva, in cui l'utente visualizza un'interfaccia basata sul Web per completare il processo di accesso.
    • Autenticazione integrata di Windows (IWA), in cui l'utente accede usando la stessa identità con cui ha effettuato l'accesso a Windows in un dominio Windows (per dispositivi aggiunti a un dominio o a Microsoft Entra ID).
    • Nome utente/password, in cui si verifica l'accesso fornendo una credenziale nome utente/password. Microsoft non consiglia il flusso di nome utente e password perché l'applicazione chiederà direttamente a un utente la password, ovvero un modello non sicuro.
    • Flusso di codice del dispositivo, in cui un dispositivo con funzionalità di esperienza utente limitate mostra al consumer un codice del dispositivo per completare il flusso di autenticazione in un dispositivo alternativo.

Gli scenari interattivi sono la posizione in cui l'applicazione client pubblica mostra un'interfaccia utente di accesso ospitata in un browser e l'utente deve accedere in modo interattivo.

Scoprire se il codice usa scenari interattivi

Il codice ADAL per l'app, in un'applicazione client pubblica che usa l'autenticazione interattiva, istanzia AuthenticationContext e include una chiamata a AcquireTokenAsync con i parametri seguenti.

  • Un clientId che è un GUID che rappresenta la registrazione della tua applicazione.
  • Un resourceUrl che indica la risorsa per cui si richiede il token.
  • URI che rappresenta l'URL di risposta.
  • Un oggetto PlatformParameters.

Aggiornare il codice per scenari interattivi

I passaggi seguenti per l'aggiornamento del codice si applicano a tutti gli scenari client riservati:

  1. Aggiungi il namespace MSAL.NET nel codice sorgente: using Microsoft.Identity.Client;.
  2. Anziché creare un'istanza di AuthenticationContext, usare PublicClientApplicationBuilder.Create per creare un'istanza di IPublicClientApplication.
  3. Anziché la stringa resourceId, MSAL.NET usa gli scope. Poiché le applicazioni che usano ADAL.NET sono pre-autorizzate, è sempre possibile usare gli ambiti seguenti: new string[] { $"{resourceId}/.default" }.
  4. Sostituire la chiamata a AuthenticationContext.AcquireTokenAsync con una chiamata a IPublicClientApplication.AcquireTokenXXX, dove XXX dipende dallo scenario.

In questo caso, sostituiamo la chiamata a AuthenticationContext.AcquireTokenAsync con una chiamata a IPublicClientApplication.AcquireTokenInteractive.

Ecco un confronto tra CODICE ADAL.NET e MSAL.NET per scenari interattivi:

ADAL

MSAL

var ac = new AuthenticationContext("https://login.microsoftonline.com/<tenantId>");
AuthenticationResult result;
result = await ac.AcquireTokenAsync("<clientId>",
"https://resourceUrl",
new Uri("https://ClientReplyUrl"),
new PlatformParameters(PromptBehavior.Auto));
var scopes = new[] { "User.Read" };

BrokerOptions options = new BrokerOptions(BrokerOptions.OperatingSystems.Windows);
options.Title = "My Awesome Application";

IPublicClientApplication app =
PublicClientApplicationBuilder.Create("YOUR_CLIENT_ID")
.WithDefaultRedirectUri()
.WithParentActivityOrWindow(GetConsoleOrTerminalWindow)
.WithBroker(options)
.Build();

AuthenticationResult result = null;

// Try to use the previously signed-in account from the cache
IEnumerable<IAccount> accounts = await app.GetAccountsAsync();
IAccount existingAccount = accounts.FirstOrDefault();

try
{    
if (existingAccount != null)
{
result = await app.AcquireTokenSilent(scopes, existingAccount).ExecuteAsync();
}
// Next, try to sign in silently with the account that the user is signed into Windows
else
{    
result = await app.AcquireTokenSilent(scopes, PublicClientApplication.OperatingSystemAccount)
.ExecuteAsync();
}
}
// Can't get a token silently, go interactive
catch (MsalUiRequiredException ex)
{
result = await app.AcquireTokenInteractive(scopes).ExecuteAsync();
}

Il codice MSAL illustrato in precedenza usa WAM (Web Account Manager) che è l'approccio consigliato per autenticare gli utenti in Windows. Se si vuole usare l'autenticazione interattiva senza WAM, vedere Autenticazione interattiva.

Per altri requisiti per configurare l'applicazione per l'uso di WAM, vedere il documento Using MSAL.NET with Web Account Manager (WAM).

Note

WAM è disponibile solo in Windows. Se si sta creando un'applicazione multipiattaforma, è necessario assicurarsi di disporre di un fallback all'autenticazione interattiva senza WAM.

Vantaggi di MSAL

Informazioni sui vantaggi della libreria MSAL nell'articolo Eseguire la migrazione delle applicazioni al Libreria di Autenticazione Microsoft (MSAL).

Importanza della registrazione con MSAL

Tra le numerose funzionalità, Libreria di Autenticazione Microsoft (MSAL) offre funzionalità di registrazione predefinite affidabili. L'abilitazione della registrazione nelle applicazioni garantisce una linea di vista diretta su eventuali problemi di autenticazione e può entrambi diagnosticarli più facilmente per la propria applicazione e aiutare il team MSAL a risolvere rapidamente i potenziali problemi. È consigliabile abilitare la registrazione per le applicazioni quando vengono distribuite in qualsiasi scenario di produzione.

Troubleshooting

Le seguenti informazioni sulla risoluzione dei problemi fanno due presupposti:

  • Il codice ADAL.NET funzionava.
  • È stata eseguita la migrazione a MSAL mantenendo lo stesso ID client.

Se viene visualizzata un'eccezione con il messaggio seguente:

AADSTS90002: Tenant 'aaaabbbb-0000-cccc-1111-dddd2222eeee' not found. This may happen if there are no active subscriptions for the tenant. Check to make sure you have the correct tenant ID. Check with your subscription administrator.

È possibile risolvere l'eccezione attenendosi alla procedura seguente:

  1. Verificare di usare la versione più recente di MSAL.NET.
  2. Verificare che l'host dell'autorità impostato durante la compilazione dell'applicazione client riservata e l'host dell'autorità usato con ADAL siano simili. In particolare, è lo stesso cloud (Azure per enti pubblici, Microsoft Azure gestito da 21Vianet o Azure Germania)?

Passaggi successivi