Nota
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare ad accedere o modificare le directory.
L'accesso a questa pagina richiede l'autorizzazione. È possibile provare a modificare le directory.
Le app ospitate all'esterno di Azure, ad esempio in locale o in un data center di terze parti, devono usare un'entità servizio dell'applicazione tramite ID Entra Microsoft per eseguire l'autenticazione ai servizi di Azure. Nelle sezioni seguenti si apprenderà:
- Come registrare un'applicazione con Microsoft Entra per creare un principal del servizio
- Come assegnare ruoli alle autorizzazioni di ambito
- Come eseguire l'autenticazione usando un'entità servizio dal codice dell'app
L'uso di principali del servizio applicativo dedicati consente di aderire al principio del privilegio minimo quando si accede alle risorse di Azure. Le autorizzazioni sono limitate ai requisiti specifici dell'app durante lo sviluppo, impedendo l'accesso accidentale alle risorse di Azure destinate ad altre app o servizi. Questo approccio consente anche di evitare problemi quando l'app viene spostata nell'ambiente di produzione assicurandosi che non sia con privilegi elevati nell'ambiente di sviluppo.
È necessario creare una registrazione dell'app diversa per ogni ambiente in cui l'app è ospitata. In questo modo è possibile configurare autorizzazioni di risorse specifiche dell'ambiente per ogni entità servizio e assicurarsi che un'app distribuita in un ambiente non parli con le risorse di Azure che fanno parte di un altro ambiente.
Registrare l'app in Azure
Gli oggetti principali del servizio dell'applicazione vengono creati tramite una registrazione dell'app in Azure usando il portale di Azure o l'Azure CLI.
Nel portale di Azure usare la barra di ricerca per passare alla pagina Registrazioni app.
Nella pagina registrazioni dell'app selezionare + Nuova registrazione.
Nella pagina Registrare un'applicazione:
- Per il campo Nome immettere un valore descrittivo che include il nome dell'app e l'ambiente di destinazione.
- Per i Tipi di account supportati , selezionare Account solo in questa directory organizzativa (solo cliente Microsoft - tenant singolo), o all'opzione che meglio si adatta alle proprie esigenze.
Seleziona Registra per registrare l'app e creare il principale del servizio.
Nella pagina registrazione app per l'app copiare l'ID applicazione (client) e ID directory (tenant) e incollarli in un percorso temporaneo per usarli in un secondo momento nelle configurazioni del codice dell'app.
Selezionare Aggiungi un certificato o un segreto per configurare le credenziali per l'app.
Nella pagina Certificati & segreti selezionare + Nuovo segreto del client.
Nel pannello a comparsa Aggiungi un segreto client visualizzato:
- Per la Descrizione, immettere un valore di corrente.
- Per il valore Scadenza, lasciare il valore predefinito consigliato di 180 giorni.
- Selezionare Aggiungi per aggiungere il segreto.
Nella pagina certificati & segreti copiare la proprietà valore del segreto client da usare in un passaggio futuro.
Nota
Il valore del segreto client viene visualizzato una sola volta dopo la creazione della registrazione dell'app. È possibile aggiungere altri segreti client senza invalidare questo segreto client, ma non è possibile visualizzare di nuovo questo valore.
Assegnare ruoli al principale del servizio applicativo
Successivamente, determinare i ruoli (autorizzazioni) necessari per l'app in base alle risorse e assegnare tali ruoli all'entità servizio creata. I ruoli possono essere assegnati nell'ambito della risorsa, del gruppo di risorse o della sottoscrizione. Questo esempio illustra come assegnare ruoli nell'ambito del gruppo di risorse, poiché la maggior parte delle app raggruppa tutte le risorse di Azure in un singolo gruppo di risorse.
Nel portale di Azure passare alla pagina Panoramica del gruppo di risorse che contiene l'app.
Selezionare Access control (IAM) dal menu di navigazione a sinistra.
Nella pagina Controllo di accesso (IAM), selezionare + Aggiungi e quindi scegliere Assegna ruolo dal menu a discesa. Nella pagina Aggiungi assegnazione di ruolo sono disponibili diverse schede per configurare e assegnare ruoli.
Nella scheda Ruolo, usare la casella di ricerca per individuare il ruolo da assegnare. Selezionare il ruolo e quindi scegliere Avanti.
Nella scheda membri :
- Per l'Assegnare l'accesso al valore di selezionare Utente, gruppo o entità servizio .
- Per il valore membri , scegliere + Seleziona membri per aprire il riquadro a comparsa Seleziona membri.
- Cerca l'entità servizio creata in precedenza e selezionala dai risultati filtrati. Scegliere Selezionare per selezionare il gruppo e chiudere il pannello a comparsa.
- Selezionare Rivedi e assegna nella parte inferiore della scheda membri.
Nella scheda Revisione + assegnazione, selezionare Revisione + assegnazione in fondo alla pagina.
Impostare le variabili di ambiente dell'app
In fase di esecuzione, alcune credenziali della libreria di identità di Azure , ad esempio DefaultAzureCredential
, EnvironmentCredential
e ClientSecretCredential
, cercano informazioni sull'entità di servizio per convenzione nelle variabili di ambiente. Esistono diversi modi per configurare le variabili di ambiente quando si usa .NET, a seconda degli strumenti e dell'ambiente.
Indipendentemente dall'approccio scelto, configurare le variabili di ambiente seguenti per un principale del servizio:
-
AZURE_CLIENT_ID
: usato per identificare l'app registrata in Azure. -
AZURE_TENANT_ID
: ID del tenant di Microsoft Entra. -
AZURE_CLIENT_SECRET
: credenziali segrete generate per l'app.
- Visual Studio
- di Visual Studio Code
- Windows
In Visual Studio le variabili di ambiente possono essere impostate nel file launchsettings.json
nella cartella Properties
del progetto. Questi valori vengono estratti automaticamente all'avvio dell'app. Tuttavia, queste configurazioni non viaggiano con l'app durante la distribuzione, quindi è necessario configurare le variabili di ambiente nell'ambiente di hosting di destinazione.
"profiles": {
"SampleProject": {
"commandName": "Project",
"dotnetRunMessages": true,
"launchBrowser": true,
"applicationUrl": "https://localhost:7177;http://localhost:5177",
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"AZURE_CLIENT_ID": "<your-client-id>",
"AZURE_TENANT_ID":"<your-tenant-id>",
"AZURE_CLIENT_SECRET": "<your-client-secret>"
}
},
"IIS Express": {
"commandName": "IISExpress",
"launchBrowser": true,
"environmentVariables": {
"ASPNETCORE_ENVIRONMENT": "Development",
"AZURE_CLIENT_ID": "<your-client-id>",
"AZURE_TENANT_ID":"<your-tenant-id>",
"AZURE_CLIENT_SECRET": "<your-client-secret>"
}
}
}
Eseguire l'autenticazione ai servizi di Azure dall'app
La libreria di identità di Azure fornisce varie credenziali , ossia implementazioni di TokenCredential
adattate al supporto di diversi scenari e flussi di autenticazione di Microsoft Entra. I passaggi successivi illustrano come usare ClientSecretCredential quando si utilizzano i principali di servizio localmente e nell'ambiente di produzione.
Implementare il codice
Aggiungere il pacchetto Azure.Identity. In un progetto ASP.NET Core installare anche il pacchetto Microsoft.Extensions.Azure:
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 per l'iniezione delle dipendenze in modo che possano essere usati in tutta l'applicazione. In Program.cs
completare i passaggi seguenti per configurare una classe client per l'inserimento delle dipendenze e l'autenticazione basata su token:
- Includere gli spazi dei nomi
Azure.Identity
eMicrosoft.Extensions.Azure
tramite direttiveusing
. - Registrare il client del servizio Azure utilizzando il metodo di estensione corrispondente con prefisso
Add
. - Configurare
ClientSecretCredential
contenantId
,clientId
eclientSecret
. - Passare l'istanza di
ClientSecretCredential
al metodoUseCredential
.
builder.Services.AddAzureClients(clientBuilder =>
{
var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");
clientBuilder.AddBlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"));
clientBuilder.UseCredential(new ClientSecretCredential(tenantId, clientId, clientSecret));
});
Un'alternativa al metodo UseCredential
consiste nel fornire direttamente le credenziali al client del servizio:
var tenantId = Environment.GetEnvironmentVariable("AZURE_TENANT_ID");
var clientId = Environment.GetEnvironmentVariable("AZURE_CLIENT_ID");
var clientSecret = Environment.GetEnvironmentVariable("AZURE_CLIENT_SECRET");
builder.Services.AddSingleton<BlobServiceClient>(_ =>
new BlobServiceClient(
new Uri("https://<account-name>.blob.core.windows.net"),
new ClientSecretCredential(tenantId, clientId, clientSecret)));