Condividi tramite


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.

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 nel menu visualizzato sotto la barra di ricerca.
Screenshot che mostra come usare la barra di ricerca superiore nella portale di Azure per trovare e passare alla pagina Registrazioni app.
Nella pagina registrazioni app, selezionare + Nuova registrazione. Screenshot che mostra il percorso del pulsante Nuova registrazione nella pagina Registrazioni app.
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 e l'ambiente (test, prod) per il quale è stata eseguita la registrazione dell'app.
  2. Tipi di account supportatiAccount solo in questa directory organizzativa.
Selezionare Registra per registrare l'app e creare l'entità servizio dell'applicazione.
Screenshot che mostra come compilare la pagina Registra un'applicazione assegnando all'app un nome e specificando i tipi di account supportati come account solo in questa directory organizzativa.
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.
Screenshot della pagina Registrazione app dopo il completamento della registrazione dell'app. Questo screenshot mostra il percorso dell'ID applicazione e dell'ID tenant che saranno necessari in un passaggio futuro. Mostra anche il percorso del collegamento da usare per aggiungere un segreto dell'applicazione per l'app.
Nella pagina Certificati e segreti, selezionare + Nuovo segreto client. Screenshot che mostra il percorso del collegamento da usare per creare un nuovo segreto client nella pagina certificati e segreti.
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.

IMPORTANTE: impostare un promemoria nel calendario prima della data di scadenza del segreto. In questo modo, è possibile aggiungere un nuovo segreto prima e aggiornare le app prima della scadenza di questo segreto, evitando un'interruzione del servizio nell'app.
Screenshot che mostra la pagina in cui viene aggiunto un nuovo segreto client per l'entità servizio dell'applicazione creata dal processo di registrazione dell'app.
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.
Screenshot che mostra la pagina con il segreto client generato.

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.

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.
Screenshot che mostra come usare la casella di ricerca superiore nel portale di Azure per individuare e passare al gruppo di risorse a cui assegnare ruoli (autorizzazioni).
Nella pagina del gruppo di risorse selezionare Controllo di accesso (IAM) nel menu a sinistra. Screenshot della pagina del gruppo di risorse che mostra la posizione della voce di menu Controllo di accesso (IAM).
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.
Screenshot che mostra come passare alla scheda Assegnazioni di ruolo e alla posizione del pulsante usato per aggiungere assegnazioni di ruolo a un gruppo di risorse.
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.
Screenshot che mostra come filtrare e selezionare le assegnazioni di ruolo da aggiungere al gruppo di risorse.
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.
Screenshot che mostra il pulsante di opzione a cui selezionare per assegnare un ruolo a un gruppo di Azure AD e il collegamento usato per selezionare il gruppo a cui assegnare il ruolo.
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 dell'entità servizio creata per l'app per filtrare l'elenco.
  2. Selezionare l'entità servizio associata all'applicazione.
Selezionare Seleziona nella parte inferiore della finestra di dialogo per continuare.
Screenshot che mostra come filtrare e selezionare il gruppo di Azure AD per l'applicazione nella finestra di dialogo Seleziona membri.
L'entità servizio 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.
Screenshot che mostra la pagina Aggiungi assegnazione di ruolo completata e il percorso del pulsante Rivedi e assegna usato per completare il processo.

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.

  1. Includere gli Azure.Identity spazi dei nomi e Microsoft.Extensions.Azure con una using direttiva .
  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.