Identità gestita con MSAL.NET

Note

Questa funzionalità è disponibile a partire da MSAL.NET versione 4.54.0.

Uno dei problemi comuni a cui devono far fronte gli sviluppatori riguarda la gestione di segreti, credenziali, certificati e chiavi per proteggere la comunicazione tra i servizi. Le identità gestite in Azure eliminare la necessità per gli sviluppatori di gestire queste credenziali manualmente. MSAL.NET supporta l'acquisizione di token tramite il servizio di gestione delle identità quando viene usato con le applicazioni in esecuzione all'interno dell'infrastruttura Azure, ad esempio:

Per un elenco completo, vedere Azure servizi che possono usare le identità gestite per accedere ad altri servizi.

Quale SDK usare: Azure SDK o MSAL?

Le librerie MSAL offrono API di livello inferiore più vicine ai protocolli OAuth2 e OIDC.

Sia MSAL.NET che Azure SDK consentono di acquisire token tramite identità gestita. Internamente, Azure SDK usa MSAL.NET e fornisce un'API di livello superiore tramite le relative DefaultAzureCredential astrazioni e ManagedIdentityCredential .

Se l'applicazione usa già uno degli SDK, continuare a usare lo stesso SDK. Usare Azure SDK, se si sta scrivendo una nuova applicazione e si prevede di chiamare altre risorse Azure, poiché questo SDK offre un'esperienza di sviluppo migliore consentendo l'esecuzione dell'app in computer per sviluppatori privati in cui l'identità gestita non esiste. Valuta l'uso di MSAL se devi chiamare altre API web downstream, come Microsoft Graph o una tua API web.

Note

Microsoft. Identity.Web è un'API di livello superiore che offre l'integrazione con ASP.NET Core e ASP.NET classico, usando MSAL sotto le quinte. La libreria consente anche di caricare le credenziali (certificati, asserzioni firmate) usate da MSAL.NET come credenziali client. Per i certificati, usa DefaultAzureCredentials per recuperare i certificati da KeyVault. Offre anche la federazione dell'identità del carico di lavoro con credenziali di identità gestite. Per informazioni dettagliate, vedere CredentialDescription.

Avvio rapido

Per iniziare rapidamente e vedere l'Identità gestita di Azure in azione, è possibile usare uno degli esempi creati dal team a questo scopo:

Come usare le identità gestite

Per gli sviluppatori sono disponibili due tipi di identità gestite, assegnate dal sistema e assegnate dall'utente. Per altre informazioni sulle differenze, vedere l'articolo Tipi di identità gestiti . MSAL.NET supporta l'acquisizione di token con entrambi. MSAL.NET registrazione consente di tenere traccia delle richieste e dei metadati correlati.

Prima di usare le identità gestite da MSAL.NET, gli sviluppatori devono abilitarli per le risorse che vogliono usare tramite interfaccia della riga di comando di Azure o il portale di Azure.

Esempi

Per le identità assegnate dall'utente e assegnate dal sistema, gli sviluppatori possono usare la ManagedIdentityApplicationBuilder classe .

Identità gestite assegnate dal sistema

Per le identità gestite assegnate dal sistema, lo sviluppatore non deve passare informazioni aggiuntive durante la creazione di un'istanza di IManagedIdentityApplication, perché dedurrà automaticamente i metadati pertinenti sull'identità assegnata.

AcquireTokenForManagedIdentity(String) viene chiamato con la risorsa per cui acquisire un token, ad esempio https://management.azure.com.

IManagedIdentityApplication mi = ManagedIdentityApplicationBuilder.Create(ManagedIdentityId.SystemAssigned)
    .Build();

AuthenticationResult result = await mi.AcquireTokenForManagedIdentity(resource)
    .ExecuteAsync()
    .ConfigureAwait(false);

Identità gestite assegnate dall'utente

Per le identità gestite assegnate dall'utente, lo sviluppatore deve specificare l'ID client, l'identificatore completo della risorsa o l'ID oggetto dell'identità gestita al momento della creazione di IManagedIdentityApplication.

Come nel caso delle identità gestite assegnate dal sistema, AcquireTokenForManagedIdentity(String) viene chiamato specificando la risorsa per cui acquisire un token, ad esempio https://management.azure.com.

IManagedIdentityApplication mi = ManagedIdentityApplicationBuilder.Create(ManagedIdentityId.WithUserAssignedClientId(clientIdOfUserAssignedManagedIdentity))
    .Build();

AuthenticationResult result = await mi.AcquireTokenForManagedIdentity(resource)
    .ExecuteAsync()
    .ConfigureAwait(false);

Caching

Per impostazione predefinita, MSAL.NET supporta la memorizzazione nella cache in memoria. MSAL non supporta l'estendibilità della cache per l'identità gestita a causa di problemi di sicurezza quando si usa la cache distribuita. Poiché un token acquisito per l'identità gestita appartiene a una risorsa Azure, l'uso di una cache distribuita potrebbe esporlo alle altre risorse Azure che condividono la cache.

Troubleshooting

Per le richieste non riuscite, la risposta di errore contiene un ID di correlazione che può essere usato per ulteriori analisi di diagnostica e log. Tenere presente che gli ID di correlazione generati in MSAL.NET o passati in MSAL sono diversi da quelli restituiti nelle risposte di errore del server, perché MSAL.NET non è possibile passare l'ID di correlazione agli endpoint di acquisizione dei token di identità gestiti.

Potenziali errori

MsalServiceException Codice errore: messaggio di errore: managed_identity_failed_response si è verificato un errore imprevisto durante il recupero del token AAD

Questa eccezione potrebbe significare che la risorsa per cui si sta tentando di acquisire un token non è supportata o viene fornita usando il formato DI ID risorsa errato. Esempi di formati di ID risorsa corretti includono https://management.azure.com/.default, https://management.azure.come https://graph.microsoft.com.

MsalServiceException Codice errore: managed_identity_unreachable_network.

Questa eccezione potrebbe significare che è probabile che si stia usando una risorsa in cui MSAL.NET non supporta l'acquisizione del token per l'identità gestita o che si esegue il codice di esempio da un computer di sviluppo in cui l'endpoint per acquisire il token per le identità gestite non è raggiungibile.