Autenticare le app ospitate in Azure in risorse di Azure con Azure SDK per .NET

Quando un'app è ospitata in Azure usando un servizio come Servizio app di Azure, Macchine virtuali di Azure o Istanze di Azure Container, l'approccio consigliato per autenticare un'app nelle risorse di Azure consiste nell'usare un'identità gestita.

Un'identità gestita fornisce un'identità per l'app in modo che possa connettersi ad altre risorse di Azure senza la necessità di usare una chiave privata o un altro segreto dell'applicazione. Internamente, Azure conosce l'identità dell'app e le risorse a cui è consentito connettersi. Azure usa queste informazioni per ottenere automaticamente i token di Microsoft Entra per consentire all'app di connettersi ad altre risorse di Azure, senza dover gestire i segreti dell'applicazione.

Tipi di identità gestita

Sono disponibili due tipi di identità gestite:

  • Assegnata dal sistema: questo tipo di identità gestita viene fornito ed direttamente associato a una risorsa di Azure. Quando si abilita l'identità gestita in una risorsa di Azure, si ottiene un'identità gestita assegnata dal sistema per tale risorsa. Un'identità gestita assegnata dal sistema è associata al ciclo di vita della risorsa di Azure a cui è associata. Quando la risorsa viene eliminata, Azure elimina automaticamente anche l'identità. Poiché è sufficiente abilitare l'identità gestita per la risorsa di Azure che ospita il codice, questo è il tipo di identità gestita più semplice da usare.
  • Assegnata dall’utente: è anche possibile creare un'identità gestita come risorsa di Azure autonoma. Questo approccio viene usato più frequentemente quando la soluzione ha più carichi di lavoro eseguiti in più risorse di Azure che devono tutti condividere la stessa identità e le stesse autorizzazioni. Ad esempio, se la soluzione include componenti eseguiti in più istanze di Servizio app e macchina virtuale che necessitano tutte dell'accesso allo stesso set di risorse di Azure, la creazione e l'uso di un'identità gestita assegnata dall'utente per tali risorse sarebbe la scelta più opportuna.

Questo articolo illustra i passaggi per abilitare e usare un'identità gestita assegnata dal sistema per un'app. Se è necessario usare un'identità gestita assegnata dall'utente, vedere l'articolo Gestire le identità gestite assegnate dall'utente per informazioni su come creare un'identità gestita assegnata dall'utente.

1 - Abilitare l'identità gestita nella risorsa di Azure che ospita l'app

Il primo passaggio consiste nell'abilitare l'identità gestita nella risorsa di Azure che ospita l'app. Ad esempio, se si ospita un'app .NET che usa Servizio app di Azure, è necessario abilitare l'identità gestita per l'app Web Servizio app che ospita l'app. Se si usa una macchina virtuale per ospitare l'app, è necessario abilitare la macchina virtuale all'uso dell'identità gestita.

È possibile abilitare l'uso dell'identità gestita per una risorsa di Azure usando il portale di Azure o l'interfaccia della riga di comando di Azure.

Istruzioni Schermata
Passare alla risorsa che ospita il codice dell’applicazione nel portale di Azure. Ad esempio, è possibile digitare il nome della risorsa nella casella di ricerca nella parte superiore della pagina e accedervi selezionandola nella finestra di dialogo. Screenshot che mostra come usare la barra di ricerca superiore nel portale di Azure per trovare e passare a una risorsa di Azure.
Nella pagina della risorsa, selezionare la voce di menu Identità dal menu a sinistra. Benché il layout del menu possa essere leggermente diverso, sarà presente una voce di menu Identità per tutte le risorse di Azure in grado di supportare le identità gestite. Screenshot che mostra la posizione della voce di menu Identità nel menu a sinistra per una risorsa di Azure.
Nella pagina Identità:
  1. Modificare il dispositivo di scorrimento Stato impostandolo su ON.
  2. Seleziona Salva.
Una finestra di dialogo di conferma verificherà se si vuole abilitare l'identità gestita per il servizio. Se si risponde , l'identità gestita verrà abilitata per la risorsa di Azure.
Screenshot che mostra come abilitare l'identità gestita per una risorsa di Azure nella pagina Identità della risorsa.

2 - Assegnare ruoli all'identità gestita

Quindi, è necessario determinare i ruoli (autorizzazioni) necessari per l'app e assegnare l'identità gestita a tali ruoli in Azure. A un'identità gestita è possibile assegnare ruoli a livello di risorsa, gruppo di risorse o sottoscrizione. Questo esempio illustra come assegnare i ruoli a livello di gruppo di risorse perché la maggior parte delle applicazioni raggruppa tutte le risorse di Azure in un unico gruppo di risorse.

Istruzioni Schermata
Individuare il gruppo di risorse per l'app cercando il nome del gruppo di risorse tramite la casella di ricerca nella parte superiore del portale di Azure.

Passare al gruppo di risorse selezionando il nome del gruppo di risorse nell'intestazione Gruppi di risorse della finestra di dialogo.
Screenshot che mostra come usare la barra di ricerca superiore nel portale di Azure per trovare e passare a un gruppo di risorse di Azure. Questo è il gruppo di risorse a cui verranno assegnati ruoli (autorizzazioni).
Nella pagina del gruppo di risorse selezionare Controllo di accesso (IAM) nel menu a sinistra. Screenshot che mostra la posizione della voce di menu Controllo di accesso (IAM) nel menu a sinistra per un gruppo di risorse di Azure.
Nella pagina Controllo di accesso (IAM):
  1. Selezionare la scheda Assegnazioni di ruolo.
  2. Selezionare + Aggiungi nel menu in alto e quindi Aggiungi assegnazione di ruolo nel menu a discesa risultante.
Screenshot che mostra come passare alla scheda Assegnazioni di ruoli e la posizione del pulsante usato per aggiungere le assegnazioni di ruolo a un gruppo di risorse.
Nella pagina Aggiungi assegnazione di ruolo sono elencati tutti i ruoli che è possibile assegnare per il gruppo di risorse.
  1. Usare la casella di ricerca per filtrare l'elenco in modo da renderlo più gestibile. Questo esempio illustra come filtrare i ruoli di BLOB del servizio di archiviazione.
  2. Selezionare il ruolo che si vuole assegnare.
Selezionare Avanti per passare alla schermata successiva.
Screenshot che mostra come filtrare e selezionare le assegnazioni di ruolo da aggiungere al gruppo di risorse.
La pagina Aggiungi assegnazione di ruolo successiva consente di specificare a quale utente assegnare il ruolo.
  1. Selezionare Identità gestita in Assegnare l'accesso a.
  2. Selezionare + Selezionare membri in Membri.
Verrà aperta una finestra di dialogo sul lato destro del portale di Azure.
Screenshot che mostra come selezionare l'identità gestita come tipo di utente a cui si assegnare il ruolo (autorizzazione) nella pagina Aggiungi assegnazioni di ruolo.
Nella finestra di dialogo Selezionare le identità gestite:
  1. È possibile usare l'elenco a discesa Identità gestita e la casella di testo Selezionare per filtrare l'elenco delle identità gestite nella sottoscrizione. In questo esempio, se si seleziona Servizio app vengono visualizzate solo le identità gestite associate a un Servizio app.
  2. Selezionare l'identità gestita per la risorsa di Azure che ospita l'app.
Selezionare Seleziona nella parte inferiore della finestra di dialogo per continuare.
Screenshot che mostra come usare la finestra di dialogo di selezione delle identità gestite per filtrare e selezionare l'identità gestita a cui assegnare il ruolo.
L'identità gestita verrà ora visualizzata come selezionata nella schermata Aggiungi assegnazione di ruolo.

Selezionare Rivedi e assegna per passare alla pagina finale e quindi Rivedi e assegna di nuovo per completare il processo.
Screenshot della schermata finale di Aggiungi assegnazioni di ruolo in cui un utente deve selezionare il pulsante Rivedi e assegna per finalizzare l'assegnazione di ruolo.

3 - Implementare DefaultAzureCredential nell'applicazione

DefaultAzureCredential è una sequenza solida e ordinata di meccanismi per l'autenticazione in Microsoft Entra. Ogni meccanismo di autenticazione è una classe derivata dalla classe TokenCredential, denominata credenziale. In fase di esecuzione, DefaultAzureCredential tenta di eseguire l'autenticazione usando la prima credenziale. Se tale credenziale non riesce ad acquisire un token di accesso, viene tentata la credenziale successiva nella sequenza e così via finché non viene ottenuto un token di accesso correttamente. In questo modo, l'app può usare credenziali diverse in ambienti diversi senza scrivere codice specifico dell'ambiente.

L'ordine e le posizioni in cui DefaultAzureCredential cerca le credenziali sono disponibili in DefaultAzureCredential.

Per usare DefaultAzureCredential, aggiungere Azure.Identity e facoltativamente, i pacchetti Microsoft.Extensions.Azure all'applicazione:

In un terminale di propria scelta passare alla directory del progetto dell'applicazione ed eseguire i comandi seguenti:

dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure

È possibile accedere ai servizi di Azure usando classi client specializzate dalle varie librerie client di Azure SDK. Queste classi e i propri servizi personalizzati devono essere registrati in modo da poter essere accessibili tramite l'inserimento delle dipendenze in tutta l'app. In Program.cs completare la procedura seguente per registrare una classe client e DefaultAzureCredential:

  1. Includere gli spazi dei nomi Azure.Identity e Microsoft.Extensions.Azure tramite le direttive using.
  2. Registrare il client del servizio di Azure usando il metodo di estensione con prefisso Add corrispondente.
  3. Passare un'istanza di DefaultAzureCredential al metodo UseCredential.

Ad esempio:

using Microsoft.Extensions.Azure;
using Azure.Identity;

builder.Services.AddAzureClients(clientBuilder =>
{
    clientBuilder.AddBlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"));
    clientBuilder.UseCredential(new DefaultAzureCredential());
});

Un'alternativa a UseCredential consiste nel creare un'istanza diretta di DefaultAzureCredential:

using Azure.Identity;

builder.Services.AddSingleton<BlobServiceClient>(_ =>
    new BlobServiceClient(
        new Uri("https://<account-name>.blob.core.windows.net"),
        new DefaultAzureCredential()));

Quando il codice precedente viene eseguito nella workstation di sviluppo locale, cerca un'entità servizio dell'applicazione nelle variabili di ambiente o negli strumenti di sviluppo installati localmente, come Visual Studio, per un set di credenziali per sviluppatori. È possibile usare entrambi gli approcci per autenticare l'app nelle risorse di Azure durante lo sviluppo locale.

Dopo la distribuzione in Azure, è possibile anche usare lo stesso codice per autenticare l'app in altre risorse di Azure. DefaultAzureCredential può recuperare automaticamente le impostazioni dell'ambiente e le configurazioni dell'identità gestita per l'autenticazione automatica in altri servizi.