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.
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.
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
:
- Includere gli spazi dei nomi
Azure.Identity
eMicrosoft.Extensions.Azure
tramite le direttiveusing
. - Registrare il client del servizio di Azure usando il metodo di estensione con prefisso
Add
corrispondente. - Passare un'istanza di
DefaultAzureCredential
al metodoUseCredential
.
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.