Eseguire l'autenticazione alle risorse di Azure da app .NET ospitate in locale
Le app ospitate al di fuori di Azure (ad esempio in locale o in un data center di terze parti) devono usare un'entità servizio dell'applicazione per l'autenticazione in Azure quando accedono alle risorse di Azure. Gli oggetti entità servizio dell'applicazione vengono creati tramite il processo di registrazione delle app in Azure. Quando viene creata un'entità servizio dell'applicazione, viene generato un ID cliente e un segreto client per l'app. L'ID client, il segreto client e l'ID tenant vengono quindi archiviati in variabili di ambiente in modo da essere usati da Azure SDK per .NET per autenticare l'app in Azure in fase di esecuzione.
È necessario creare una registrazione dell'app diversa per ogni ambiente in cui l'app è ospitata. In questo modo è possibile configurare le autorizzazioni per le risorse specifiche dell'ambiente per ogni entità servizio e di assicurarsi che un'app distribuita in un ambiente non parli con le risorse di Azure che fanno parte di un altro ambiente.
1 - Registrare l'applicazione in Azure
Un'app può essere registrata con Azure usando il portale di Azure o l'interfaccia della riga di comando di Azure.
Accedere al portale di Azure e seguire la procedura seguente.
2 - Assegnare ruoli all'entità servizio dell'applicazione
Successivamente, è necessario determinare i ruoli (autorizzazioni) necessari per l'app in base alle risorse e assegnare tali ruoli all'app. I ruoli possono essere assegnati a una risorsa, a gruppo di risorse o a una sottoscrizione. Questo esempio illustra come assegnare ruoli per l'entità servizio nell'ambito del gruppo di risorse, perché la maggior parte delle applicazioni raggruppa tutte le risorse di Azure in un singolo gruppo di risorse.
3 - Configurare le variabili di ambiente per l'applicazione
L'oggetto DefaultAzureCredential
cercherà le credenziali dell'entità servizio in un set di variabili di ambiente in fase di esecuzione. Esistono diversi modi per configurare le variabili di ambiente quando si usa .NET a seconda degli strumenti e dell'ambiente.
Indipendentemente dall'approccio scelto, è necessario configurare le variabili di ambiente seguenti quando si usa un'entità servizio.
AZURE_CLIENT_ID
→ Il valore dell'ID dell'app.AZURE_TENANT_ID
→ Il valore dell'ID del tenant.AZURE_CLIENT_SECRET
→ Password/credenziali generate per l'app.
Se l'app è ospitata in IIS, è consigliabile impostare le variabili di ambiente per pool di app per isolare le impostazioni tra le applicazioni.
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='ASPNETCORE_ENVIRONMENT',value='Production']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_CLIENT_ID',value='00000000-0000-0000-0000-000000000000']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_TENANT_ID',value='11111111-1111-1111-1111-111111111111']" /commit:apphost
appcmd.exe set config -section:system.applicationHost/applicationPools /+"[name='Contoso'].environmentVariables.[name='AZURE_CLIENT_SECRET',value='=abcdefghijklmnopqrstuvwxyz']" /commit:apphost
È anche possibile configurare queste impostazioni direttamente usando l'elemento applicationPools
all'interno del file applicationHost.config
.
<applicationPools>
<add name="CorePool" managedRuntimeVersion="v4.0" managedPipelineMode="Classic">
<environmentVariables>
<add name="ASPNETCORE_ENVIRONMENT" value="Development" />
<add name="AZURE_CLIENT_ID" value="00000000-0000-0000-0000-000000000000" />
<add name="AZURE_TENANT_ID" value="11111111-1111-1111-1111-111111111111" />
<add name="AZURE_CLIENT_SECRET" value="=abcdefghijklmnopqrstuvwxyz" />
</environmentVariables>
</add>
</applicationPools>
4 - Implementare DefaultAzureCredential nell'applicazione
DefaultAzureCredential
supporta più metodi di autenticazione e determina il metodo di autenticazione usato in fase di esecuzione. In questo modo, l'app può usare metodi di autenticazione diversi in ambienti diversi senza implementare codice specifico dell'ambiente.
L'ordine e le posizioni in cui DefaultAzureCredential
cerca le credenziali sono disponibili in DefaultAzureCredential.
Per implementare DefaultAzureCredential
, aggiungere prima di tutto il pacchetto Azure.Identity
e facoltativamente i pacchetti Microsoft.Extensions.Azure
all'applicazione. A tale scopo, è possibile usare la riga di comando o Gestione pacchetti NuGet.
Aprire l'ambiente terminale desiderato nella directory del progetto dell'applicazione e immettere il comando seguente.
dotnet add package Azure.Identity
dotnet add package Microsoft.Extensions.Azure
I servizi di Azure sono in genere accessibili usando le classi client corrispondenti dall'SDK. Queste classi e i propri servizi personalizzati devono essere registrati nel file Program.cs
in modo da poter essere accessibili tramite l'inserimento delle dipendenze in tutta l'app. All'interno di Program.cs
, seguire questa procedura per configurare correttamente il servizio e DefaultAzureCredential
.
- Includere gli
Azure.Identity
spazi dei nomi eMicrosoft.Extensions.Azure
con unausing
direttiva . - Registrare il servizio di Azure usando i metodi helper pertinenti.
- Passare un'istanza dell'oggetto
DefaultAzureCredential
al metodoUseCredential
.
Un esempio è illustrato nel segmento di codice seguente.
using Microsoft.Extensions.Azure;
using Azure.Identity;
// Inside of Program.cs
builder.Services.AddAzureClients(x =>
{
x.AddBlobServiceClient(new Uri("https://<account-name>.blob.core.windows.net"));
x.UseCredential(new DefaultAzureCredential());
});
In alternativa, è anche possibile usare DefaultAzureCredential
nei servizi più direttamente senza l'aiuto di altri metodi di registrazione di Azure, come illustrato di seguito.
using Azure.Identity;
// Inside of Program.cs
builder.Services.AddSingleton<BlobServiceClient>(x =>
new BlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"),
new DefaultAzureCredential()));
Quando il codice precedente viene eseguito nella workstation locale durante lo sviluppo locale, cercherà nelle variabili di ambiente un'entità servizio dell'applicazione o in Visual Studio, VS Code, nell'interfaccia della riga di comando di Azure o in Azure PowerShell un set di credenziali per sviluppatori, che possono essere usate per autenticare l'app nelle risorse di Azure durante lo sviluppo locale.
Quando 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 l'autenticazione automatica in altri servizi.
Commenti e suggerimenti
https://aka.ms/ContentUserFeedback.
Presto disponibile: Nel corso del 2024 verranno gradualmente disattivati i problemi di GitHub come meccanismo di feedback per il contenuto e ciò verrà sostituito con un nuovo sistema di feedback. Per altre informazioni, vedereInvia e visualizza il feedback per