Share via


Autenticare le app .NET nei servizi di Azure durante lo sviluppo locale usando entità servizio

Quando si creano applicazioni cloud, gli sviluppatori devono eseguire il debug e il test delle applicazioni nella workstation locale. Quando un'applicazione 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. Questo articolo illustra come configurare oggetti entità servizio dell'applicazione dedicati da usare durante lo sviluppo locale.

A diagram showing how a .NET app during local development will use the developer's credentials to connect to Azure by obtaining those credentials locally installed development tools.

Le entità servizio dell'applicazione dedicate per lo sviluppo locale consentono di seguire il principio dei privilegi minimi durante lo sviluppo di app. Poiché l'ambito delle autorizzazioni è esattamente quello necessario per l'app durante lo sviluppo, il codice dell'app non può accedere accidentalmente a una risorsa di Azure destinata all'uso da parte di un'app diversa. Ciò impedisce anche che si verifichino bug quando l'app viene spostata nell'ambiente di produzione perché l'app è stata privilegiata nell'ambiente di sviluppo.

Un'entità servizio dell'applicazione viene configurata per l'app quando l'app viene registrata in Azure. Quando si registrano app per lo sviluppo locale, è consigliabile:

  • Creare registrazioni app separate per ogni sviluppatore che lavora sull'app. In questo modo verranno create entità servizio dell'applicazione separate per ogni sviluppatore da usare durante lo sviluppo locale ed evitare la necessità per gli sviluppatori di condividere le credenziali per una singola entità servizio dell'applicazione.
  • Creare registrazioni di app separate per ogni app. Questo definisce l'ambito delle autorizzazioni dell'app solo a ciò che è necessario per l'app.

Durante lo sviluppo locale, le variabili di ambiente vengono impostate con l'identità dell'entità servizio dell'applicazione. Azure SDK per NET legge queste variabili di ambiente e usa queste informazioni per autenticare l'app nelle risorse di Azure necessarie.

1 - Registrare l'applicazione in Azure

Gli oggetti entità servizio dell'applicazione vengono creati con una registrazione dell'app in Azure. Questa operazione può essere effettuata tramite il portale di Azure o l'interfaccia della riga di comando di Azure.

Accedere al portale di Azure e seguire la procedura seguente.

Istruzioni Schermata
Nel portale di Azure:
  1. Immettere registrazioni app nella barra di ricerca nella parte superiore del portale di Azure.
  2. Selezionare l'elemento etichettato Registrazioni app sotto l'intestazione Servizi del menu visualizzato sotto la barra di ricerca.
A screenshot showing how to use the top search bar in the Azure portal to find and navigate to the App registrations page.
Nella pagina registrazioni app, selezionare + Nuova registrazione. A screenshot showing the location of the New registration button in the App registrations page.
Nella pagina Registrare un'applicazione, compilare il modulo come segue.
  1. Nome → Immettere un nome per la registrazione app in Azure. È consigliabile che questo nome includa il nome dell'app, l'utente per la registrazione dell'app e un identificatore come "dev" per indicare che la registrazione dell'app è da usare nello sviluppo locale.
  2. Tipi di account supportatiAccount solo in questa directory organizzativa.
Selezionare Registra per registrare l'app e creare l'entità servizio dell'applicazione.
A screenshot showing how to fill out the Register an application page by giving the app a name and specifying supported account types as accounts in this organizational directory only.
Nella pagina Registrazione app per l'app:
  1. ID applicazione (client) → Questo è l'ID app che l'app userà per accedere ad Azure durante lo sviluppo locale. Copiare questo valore in una posizione temporanea in un editor di testo perché sarà necessario in un passaggio futuro.
  2. ID directory (tenant) → Questo valore sarà necessario anche per l'app quando esegue l'autenticazione in Azure. Copiare questo valore in una posizione temporanea in un editor di testo, in quanto sarà necessario in un passaggio futuro.
  3. Credenziali client → È necessario impostare le credenziali client per l'app prima che l'app possa eseguire l'autenticazione in Azure e usare i servizi di Azure. Selezionare Aggiungi un certificato o un segreto per aggiungere le credenziali per l'app.
A screenshot of the App registration page after the app registration has been completed. This screenshot shows the location of the application ID and tenant ID, which will be needed in a future step. It also shows the location of the link to use to add an application secret for the app.
Nella pagina Certificati e segreti, selezionare + Nuovo segreto client. A screenshot showing the location of the link to use to create a new client secret on the certificates and secrets page.
La finestra di dialogo Aggiungi un segreto client verrà visualizzata dal lato destro della pagina. In questa finestra di dialogo:
  1. Descrizione → Immettere un valore Corrente.
  2. Scade → Selezionare un valore di 24 mesi.
Selezionare Aggiungere per aggiungere il segreto.
A screenshot showing the page where a new client secret is added for the application service principal create by the app registration process.
Nella pagina Certificati e segreti verrà visualizzato il valore del segreto client.

Copiare questo valore in una posizione temporanea in un editor di testo perché sarà necessario in un passaggio futuro.

IMPORTANTE: questo è l'unico caso in cui si visualizzarà questo valore. Una volta lasciata o aggiornata la pagina, non sarà più possibile visualizzare questo valore. È possibile aggiungere un segreto client aggiuntivo senza invalidare questo segreto client, ma questo valore non verrà visualizzato di nuovo.
A screenshot showing the page with the generated client secret.

2 - Creare un gruppo di sicurezza di Azure AD per lo sviluppo locale

Poiché in genere più sviluppatori che lavorano in un'applicazione, è consigliabile creare un gruppo di Azure AD per incapsulare i ruoli (autorizzazioni) necessari per l'app nello sviluppo locale anziché assegnare i ruoli ai singoli oggetti entità servizio. Questo offre i vantaggi seguenti:

  • Ogni sviluppatore ha la certezza di avere gli stessi ruoli assegnati perché i ruoli vengono assegnati a livello di gruppo.
  • Se è necessario un nuovo ruolo per l'app, deve essere aggiunto solo al gruppo di Azure AD per l'app.
  • Se un nuovo sviluppatore si aggiunge al team, viene creata una nuova entità servizio dell'applicazione per lo sviluppatore e aggiunta al gruppo, assicurando che lo sviluppatore disponga delle autorizzazioni appropriate per lavorare sull'app.
Istruzioni Schermata
Passare alla pagina Azure Active Directory nel portale di Azure digitando Azure Active Directory nella casella di ricerca nella parte superiore della pagina e quindi selezionando Azure Active Directory in servizi. A screenshot showing how to use the top search bar in the Azure portal to search for and navigate to the Azure Active Directory page.
Nella pagina Azure Active Directory, selezionare Gruppi dal menu a sinistra. A screenshot showing the location of the Groups menu item in the left-hand menu of the Azure Active Directory Default Directory page.
Nella pagina Tutti i gruppi, selezionare Nuovo gruppo. A screenshot showing the location of the New Group button in the All groups page.
Nella pagina Nuovo gruppo:
  1. Tipo di gruppo: → Sicurezza
  2. Nome gruppo → Un nome per il gruppo di sicurezza, in genere creato dal nome dell'applicazione. È anche utile includere una stringa come local-dev nel nome del gruppo per indicare lo scopo del gruppo.
  3. Descrizione del gruppo → Una descrizione dello scopo del gruppo.
  4. Selezionare il collegamento Nessun membro selezionato in Membri per aggiungere membri al gruppo.
A screenshot showing how to fill out the form to create a new Azure Active Directory group for the application. This screenshot also shows the location of the link to select to add members to this group.
Nella finestra di dialogo Aggiungi membri:
  1. Usare la casella di ricerca per filtrare l'elenco di nomi principali nell'elenco.
  2. Selezionare le entità servizio dell'applicazione per lo sviluppo locale per questa app. Quando vengono selezionati gli oggetti, verranno disabilitati e spostati nell'elenco Elementi selezionati nella parte inferiore della finestra di dialogo.
  3. Al termine, selezionare il pulsante Seleziona.
A screenshot of the Add members dialog box showing how to select application service principals to be included in the group.
Nella pagina Nuovo gruppo, selezionare Crea per creare il gruppo.

Il gruppo verrà creato e si tornerà alla pagina Tutti i gruppi. La visualizzazione del gruppo potrebbe richiedere fino a 30 secondi e potrebbe essere necessario aggiornare la pagina a causa della memorizzazione nella cache nel portale di Azure.
A screenshot of the New Group page showing how to complete the process by selecting the Create button.

3 - Assegnare ruoli all'applicazione

Successivamente, è necessario determinare i ruoli (autorizzazioni) necessari per l'app in base alle risorse e assegnare tali ruoli all'app. In questo esempio i ruoli verranno assegnati al gruppo di Azure Active Directory creato nel passaggio 2. I ruoli possono essere assegnati a una risorsa, a gruppo di risorse o a una 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'applicazione cercando il nome del gruppo di risorse usando 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.
A screenshot showing how to use the top search box in the Azure portal to locate and navigate to the resource group you want to assign roles (permissions) to.
Nella pagina del gruppo di risorse selezionare Controllo di accesso (IAM) nel menu a sinistra. A screenshot of the resource group page showing the location of the Access control (IAM) menu item.
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.
A screenshot showing how to navigate to the role assignments tab and the location of the button used to add role assignments to a resource group.
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.
A screenshot showing how to filter and select role assignments to be added to the resource group.
La pagina Aggiungi assegnazione di ruolo successiva consente di specificare a quale utente assegnare il ruolo.
  1. Selezionare Utente, gruppo o servizio principale in Assegnazione dell'accesso a .
  2. Selezionare + Selezionare membri in Membri
Verrà aperta una finestra di dialogo sul lato destro del portale di Azure.
A screenshot showing the radio button to select to assign a role to an Azure AD group and the link used to select the group to assign the role to.
Nella finestra di dialogo Seleziona membri:
  1. La casella di testo Seleziona può essere usata per filtrare l'elenco di utenti e gruppi nella sottoscrizione. Se necessario, digitare i primi caratteri del gruppo di Azure AD di sviluppo locale creato per l'app.
  2. Selezionare il gruppo azure AD di sviluppo locale associato all'applicazione.
Selezionare Seleziona nella parte inferiore della finestra di dialogo per continuare.
A screenshot showing how to filter for and select the Azure AD group for the application in the Select members dialog box.
Il gruppo Azure AD 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.
A screenshot showing the completed Add role assignment page and the location of the Review + assign button used to complete the process.

4 - Impostare le variabili di ambiente dell'applicazione

L'oggetto DefaultAzureCredential cercherà le informazioni sull'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.

Quando si lavora localmente con Visual Studio, le variabili di ambiente possono essere impostate nel file launchsettings.json nella cartella del progetto Properties. All'avvio dell'app, questi valori verranno estratti automaticamente. Tenere presente che queste configurazioni non viaggiano con l'applicazione quando viene distribuita, quindi sarà comunque 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": "00000000-0000-0000-0000-000000000000",
        "AZURE_TENANT_ID":"11111111-1111-1111-1111-111111111111",
        "AZURE_CLIENT_SECRET": "=abcdefghijklmnopqrstuvwxyz"
      }
    },
    "IIS Express": {
      "commandName": "IISExpress",
      "launchBrowser": true,
      "environmentVariables": {
        "ASPNETCORE_ENVIRONMENT": "Development",
        "AZURE_CLIENT_ID": "00000000-0000-0000-0000-000000000000",
        "AZURE_TENANT_ID": "11111111-1111-1111-1111-111111111111",
        "AZURE_CLIENT_SECRET": "=abcdefghijklmnopqrstuvwxyz"
      }
    }
  }

5 - 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.

  1. Includere gli spazi dei nomi Azure.Identity e Microsoft.Extensions.Azure con un'istruzione using.
  2. Registrare il servizio di Azure usando i metodi helper pertinenti.
  3. Passare un'istanza dell'oggetto DefaultAzureCredential al metodo UseCredential.

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.