Autenticare le app .NET nei servizi di Azure usando la panoramica della libreria di identità di Azure
Quando un'app deve accedere a una risorsa di Azure, l'app deve essere autenticata in Azure. Questo vale per tutte le app, sia distribuite in Azure, distribuite in locale o in fase di sviluppo in una workstation per sviluppatori locale. Questo articolo descrive gli approcci consigliati per autenticare un'app in Azure quando si usano le librerie client di Azure SDK.
Approccio consigliato per l'autenticazione delle app
È consigliabile che le app usino l'autenticazione basata su token anziché le stringhe di connessione durante l'autenticazione alle risorse di Azure. La libreria di identità di Azure fornisce classi che supportano l'autenticazione basata su token e consentono alle app di eseguire facilmente l'autenticazione alle risorse di Azure, indipendentemente dal fatto che l'app sia in fase di sviluppo locale, distribuita in Azure o distribuita in un server locale.
Il tipo specifico di autenticazione basata su token che un'app deve usare per eseguire l'autenticazione alle risorse di Azure dipende dalla posizione in cui viene eseguita l'app ed è illustrata nel diagramma seguente:
Quando un'app è:
- In esecuzione in locale durante lo sviluppo, l'app può eseguire l'autenticazione in Azure usando un servizio principale dell'applicazione per lo sviluppo locale o usando le credenziali di Azure dello sviluppatore. Ogni opzione viene illustrata in modo più dettagliato nell'autenticazione durante lo sviluppo locale.
- Ospitato in Azure, l'app deve eseguire l'autenticazione alle risorse di Azure usando un'identità gestita. Questa opzione è illustrata in modo più dettagliato in autenticazione negli ambienti server.
- Ospitata e distribuita in locale, l'app deve autenticarsi alle risorse di Azure utilizzando un principal del servizio dell'applicazione. Questa opzione è illustrata in modo più dettagliato in autenticazione negli ambienti server.
DefaultAzureCredential
La DefaultAzureCredential classe fornita dalla libreria Identità di Azure consente alle app di usare metodi di autenticazione diversi a seconda dell'ambiente in cui vengono eseguite. In questo modo le app possono essere promosse dallo sviluppo locale agli ambienti di test all'ambiente di produzione senza modifiche al codice. Si configura il metodo di autenticazione appropriato per ogni ambiente e DefaultAzureCredential
rileverà e userà automaticamente tale metodo di autenticazione. L'uso di DefaultAzureCredential
deve essere preferito rispetto alla codifica manuale della logica condizionale o dei flag di funzionalità per l'uso di metodi di autenticazione diversi in ambienti diversi.
I dettagli sull'uso di DefaultAzureCredential
sono disponibili in Usare DefaultAzureCredential
in un'applicazione.
Vantaggi dell'autenticazione basata su token
L'autenticazione basata su token offre i vantaggi seguenti rispetto all'autenticazione con le stringhe di connessione:
- I metodi di autenticazione basati su token descritti di seguito consentono di stabilire le autorizzazioni specifiche necessarie per l'app nella risorsa di Azure. Questo segue il principio dei privilegi minimi. Al contrario, una stringa di connessione concede diritti completi alla risorsa di Azure.
- Mentre chiunque o qualsiasi app con una stringa di connessione può connettersi a una risorsa di Azure, i metodi di autenticazione basati su token hanno come ambito l'accesso alla risorsa solo alle app destinate ad accedere alla risorsa.
- Nel caso di un'identità gestita, non esiste alcun segreto dell'applicazione da archiviare. In questo modo l'app è più sicura perché non esiste una stringa di connessione o un segreto dell'applicazione che può essere compromesso.
- Il pacchetto Azure.Identity acquisisce e gestisce automaticamente i token di Microsoft Entra. Ciò semplifica l'uso dell'autenticazione basata su token come stringa di connessione.
L'uso delle stringhe di connessione deve essere limitato alle app iniziali di verifica o ai prototipi di sviluppo che non accedono ai dati sensibili o di produzione. In caso contrario, le classi di autenticazione basate su token disponibili nella libreria di identità di Azure devono essere sempre preferite quando si esegue l'autenticazione alle risorse di Azure.
Autenticazione negli ambienti server
Quando si ospita in un ambiente server, a ogni app deve essere assegnata un'identità dell'applicazione univoca per ogni ambiente in cui viene eseguita l'app. In Azure un'identità dell'applicazione è rappresentata da un'entità servizio , un tipo speciale di 'entità di sicurezza destinata a identificare ed autenticare le app in Azure. Il tipo di service principal da utilizzare per la tua app dipende dall'ambiente in cui l'app è in esecuzione.
Metodo di autenticazione | Descrizione |
---|---|
App ospitate in Azure | Le app ospitate in Azure devono usare un'entità servizio dell'identità gestita . Le identità gestite sono progettate per rappresentare l'identità di un'app ospitata in Azure e possono essere usate solo con le app ospitate in Azure. Ad esempio, a un'app Web .NET ospitata nel servizio app di Azure verrebbe assegnata un'identità gestita. L'identità gestita assegnata all'app verrà quindi usata per autenticare l'app in altri servizi di Azure. |
App ospitate all'esterno di Azure (ad esempio, app locali) |
Le app ospitate all'esterno di Azure (ad esempio le app locali) che devono connettersi ai servizi di Azure devono usare un'entità servizio dell'applicazione . Il principale del servizio applicativo rappresenta l'identità dell'applicazione in Azure ed è creato tramite il processo di registrazione dell'applicazione. Si consideri, ad esempio, un'app Web .NET ospitata in locale che usa Archiviazione BLOB di Azure. Devi creare un'entità servizio dell'applicazione per l'applicazione usando il processo di registrazione dell'applicazione. Il AZURE_CLIENT_ID , AZURE_TENANT_ID e AZURE_CLIENT_SECRET verrebbero archiviati come variabili di ambiente da leggere dall'applicazione in fase di esecuzione, consentendo all'app di autenticarsi in Azure utilizzando il principale del servizio dell'applicazione. |
Autenticazione durante lo sviluppo locale
Quando un'app viene eseguita nella workstation di uno sviluppatore durante lo sviluppo locale, deve comunque eseguire l'autenticazione a tutti i servizi di Azure usati dall'app. Le due strategie principali per l'autenticazione delle app in Azure durante lo sviluppo locale sono:
Metodo di autenticazione | Descrizione |
---|---|
Creare oggetti entità servizio dell'applicazione dedicati da usare durante lo sviluppo locale | In questo metodo vengono configurati 'entità servizio dell'applicazione dedicata oggetti usando il processo di registrazione dell'app da usare durante lo sviluppo locale. L'identità dell'entità servizio viene quindi archiviata come variabili di ambiente a cui l'app può accedere quando viene eseguita in modalità di sviluppo locale. Questo metodo consente di assegnare le autorizzazioni di risorsa specifiche necessarie dall'app agli oggetti entità servizio usati dagli sviluppatori durante lo sviluppo locale. In questo modo, l'applicazione ha accesso solo alle risorse specifiche necessarie e replica le autorizzazioni che l'app avrà nell'ambiente di produzione. Lo svantaggio di questo approccio è la necessità di creare oggetti entità servizio separati per ogni sviluppatore che funziona su un'applicazione. |
Autenticare l'app in Azure usando le credenziali dello sviluppatore durante lo sviluppo locale | In questo metodo, uno sviluppatore deve accedere ad Azure da Visual Studio, dall'estensione Strumenti di Azure per VS Code, dall'interfaccia della riga di comando di Azure o da Azure PowerShell nella workstation locale. L'applicazione può quindi accedere alle credenziali dello sviluppatore dall'archivio credenziali e usare tali credenziali per accedere alle risorse di Azure dall'app. Questo metodo offre il vantaggio di una configurazione più semplice perché uno sviluppatore deve accedere solo al proprio account Azure da Visual Studio, VS Code o dall'interfaccia della riga di comando di Azure. Lo svantaggio di questo approccio è che l'account dello sviluppatore ha probabilmente più autorizzazioni rispetto a quelle richieste dall'applicazione. Di conseguenza, questo approccio non replica in modo accurato le autorizzazioni con cui verrà eseguita l'app nell'ambiente di produzione. |
Usare DefaultAzureCredential in un'applicazione
DefaultAzureCredential è una sequenza ordinata e predeterminata di meccanismi per l'autenticazione in Microsoft Entra ID. Ogni meccanismo di autenticazione è una classe derivata dalla classe TokenCredential ed è nota come 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 correttamente un token di accesso. In questo modo, l'app può usare credenziali diverse in ambienti diversi senza scrivere codice specifico dell'ambiente.
Per usare DefaultAzureCredential
, aggiungere il Azure.Identity e facoltativamente i pacchetti Microsoft.Extensions.Azure all'applicazione:
- della riga di comando
- gestione pacchetti NuGet
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 tuoi servizi personalizzati devono essere registrati affinché possano essere accessibili tramite dependency injection in tutta l'app. In Program.cs
completare i passaggi seguenti per registrare una classe client e DefaultAzureCredential
:
- Includere gli spazi dei nomi
Azure.Identity
eMicrosoft.Extensions.Azure
tramite direttiveusing
. - Registrare il client del servizio di Azure utilizzando il corrispondente metodo di estensione con prefisso
Add
. - Passa un'istanza di
DefaultAzureCredential
al metodoUseCredential
.
Per 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 alla UseCredential
consiste nell'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 nelle variabili di ambiente un'entità servizio dell'applicazione o in strumenti di sviluppo installati localmente, ad esempio Visual Studio, per un set di credenziali per sviluppatori. Entrambi gli approcci possono essere usati per autenticare l'app nelle risorse di Azure durante lo sviluppo locale.
Quando viene distribuito in Azure, lo stesso codice può anche autenticare l'app in altre risorse di Azure.
DefaultAzureCredential
può recuperare automaticamente le impostazioni dell'ambiente e le configurazioni dell'identità gestita per autenticarsi ad altri servizi.