Condividi tramite


Eseguire l'autenticazione alle risorse di Azure dalle app JavaScript ospitate in locale

Le applicazioni ospitate all'esterno di Azure, ad esempio in locale o in un data center di terze parti, devono utilizzare un principale servizio applicazione attraverso Microsoft Entra ID per 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 di servizio dedicati dell'applicazione consente di rispettare il principio del privilegio minimo per l'accesso 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 garantisce che un'app distribuita in un ambiente non parli con le risorse di Azure in un altro ambiente.

Registrare l'app in Azure

Gli oggetti principal del servizio vengono creati tramite una registrazione dell'app in Azure usando il portale di Azure o Azure CLI.

  1. Nel portale di Azure, utilizzare la barra di ricerca per accedere alla pagina Registrazioni app.

  2. Nella pagina registrazioni app, selezionare + Nuova registrazione.

  3. 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 Microsoft Customer Led - tenant singolo), o l'opzione che più risponde alle proprie necessità.
  4. Selezionare Registra per registrare l'app e creare l'entità servizio.

    Screenshot che mostra come creare una registrazione dell'app nel portale di Azure.

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

  6. Selezionare Aggiungi un certificato o un segreto per configurare le credenziali per l'app.

  7. Nella pagina Certificati & segreti, seleziona + Nuovo segreto del client.

  8. Nel pannello a comparsa Aggiungi un client segreto che si apre:

    • Per Descrizione, immettere un valore di Current.
    • Per il valore Expires, lasciare il valore consigliato predefinito di 180 days.
    • Selezionare Aggiungere per aggiungere il segreto.
  9. Nella pagina certificati & segreti copiare la proprietà valore del segreto client da usare in un passaggio futuro.

    Annotazioni

    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 di servizio dell'applicazione

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.

  1. Nel portale di Azure passare alla pagina Panoramica del gruppo di risorse che contiene l'app.

  2. Selezionare Access control (IAM) dal menu di navigazione a sinistra.

  3. Nella pagina Controllo di accesso (IAM) selezionare + Aggiungi e quindi scegliere Aggiungi assegnazione di ruolo dal menu a discesa. Nella pagina Aggiungi assegnazione di ruolo sono disponibili diverse schede per configurare e assegnare ruoli.

  4. Nella scheda Ruolo usare la casella di ricerca per individuare il ruolo da assegnare. Selezionare il ruolo e quindi scegliere Avanti.

  5. Nella scheda Membri :

    • Per il valore Assegna l'accesso a, selezionare Utente, gruppo o entità servizio.
    • Per il valore Membri scegliere + Seleziona membri per aprire il pannello a comparsa Seleziona membri .
    • Cerca il principale del servizio creato in precedenza e selezionalo 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 .

    Una schermata che mostra come assegnare un ruolo al principale del servizio.

  6. Nella scheda Rivedi e assegna selezionare Rivedi e assegna nella parte inferiore della pagina.

Impostare le variabili di ambiente dell'app

In fase di esecuzione, alcune credenziali della libreria di identità di Azure , ad esempio DefaultAzureCredential, EnvironmentCredentiale ClientSecretCredential, cercano le informazioni sull'entità servizio per convenzione nelle variabili di ambiente. Esistono diversi modi per configurare le variabili di ambiente quando si usa JavaScript, a seconda degli strumenti e dell'ambiente.

Indipendentemente dall'approccio scelto, configurare le seguenti variabili di ambiente per un service principal:

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

In Visual Studio Code le variabili di ambiente possono essere impostate nel file launch.json 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.

"configurations": [
{
    "env": {
        "NODE_ENV": "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 usano principali del servizio localmente e in ambiente di produzione.

Implementare il codice

Aggiungere il pacchetto @azure/identity nel progetto Node.js:

npm install @azure/identity

È possibile accedere ai servizi di Azure usando classi client specializzate dalle varie librerie client di Azure SDK. Per qualsiasi codice JavaScript che crea un oggetto client azure SDK nell'app, seguire questa procedura:

  1. Importare la ClientSecretCredential classe dal @azure/identity modulo.
  2. Creare un ClientSecretCredential oggetto con tenantId, clientIde clientSecret.
  3. Passare l'istanza ClientSecretCredential al costruttore dell'oggetto client di Azure SDK.

Un esempio di questo approccio è illustrato nel segmento di codice seguente:

import { BlobServiceClient } from '@azure/storage-blob';
import { ClientSecretCredential } from '@azure/identity';

// Authentication
const tenantId = process.env.AZURE_TENANT_ID;
const clientId = process.env.AZURE_CLIENT_ID;
const clientSecret = process.env.AZURE_CLIENT_SECRET;

// Azure Storage account name
const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;

if (!tenantId || !clientId || !clientSecret || !accountName) {
  throw Error('Required environment variables not found');
}

const credential = new ClientSecretCredential(tenantId, clientId, clientSecret);

const blobServiceClient = new BlobServiceClient(
  `https://${accountName}.blob.core.windows.net`,
  credential
);

Un approccio alternativo consiste nel passare l'oggetto ClientSecretCredential direttamente al costruttore client di Azure SDK:

const blobServiceClient = new BlobServiceClient(
  `https://${accountName}.blob.core.windows.net`,
  new ClientSecretCredential(tenantId, clientId, clientSecret)
);