Come autenticare le app JavaScript nei servizi di Azure usando Azure SDK per JavaScript

Quando un'applicazione deve accedere a una risorsa di Azure, ad esempio Archiviazione, Key Vault o Servizi cognitivi, l'applicazione deve essere autenticata in Azure. Questo vale per tutte le applicazioni, sia distribuite in Azure, distribuite in locale o in fase di sviluppo in una workstation per sviluppatori locale. Questo articolo descrive gli approcci consigliati per autenticare un'app in Azure quando si usa Azure SDK per JavaScript.

Il processo consigliato consiste nel fare in modo che le app usino l'autenticazione basata su token, anziché stringa di connessione o chiavi, durante l'autenticazione nelle risorse di Azure. Azure SDK fornisce l'autenticazione basata su token e consente alle app di eseguire facilmente l'autenticazione alle risorse di Azure, indipendentemente dal fatto che l'app sia in fase di sviluppo locale, distribuita in Azure o distribuita in un server locale.

Il tipo specifico di autenticazione basata su token che un'app deve usare per eseguire l'autenticazione alle risorse di Azure dipende dalla posizione in cui è in esecuzione l'app ed è illustrata nel diagramma seguente.

Ambiente Autenticazione
Locale Quando uno sviluppatore esegue un'app durante lo sviluppo locale: l'app può eseguire l'autenticazione in Azure usando un'entità servizio applicazione per lo sviluppo locale o usando le credenziali di Azure dello sviluppatore. Ognuna di queste opzioni viene descritta in modo più dettagliato nella sezione autenticazione durante lo sviluppo locale.
Azure Quando un'app è ospitata in Azure- L'app deve eseguire l'autenticazione alle risorse di Azure usando un'identità gestita. Questa opzione è illustrata in modo più dettagliato di seguito nella sezione autenticazione negli ambienti server.
Locale Quando un'app è ospitata e distribuita in locale: l'app deve eseguire l'autenticazione alle risorse di Azure usando un'entità servizio dell'applicazione. Questa opzione è illustrata in modo più dettagliato di seguito nella sezione autenticazione negli ambienti server.

Diagramma che mostra le strategie di autenticazione consigliate basate su token per un'app a seconda della posizione in cui è in esecuzione.

Vantaggi dell'autenticazione basata su token

Quando si creano app per Azure, è consigliabile usare l'autenticazione basata su token sui segreti (stringa di connessione o chiavi). L'autenticazione basata su token viene fornita con DefaultAzureCredential.

Autenticazione basata su token Segreti (stringa di connessione e chiavi)
Principio dei privilegi minimi, stabilire le autorizzazioni specifiche necessarie per l'app nella risorsa di Azure. Un stringa di connessione o una chiave concede diritti completi alla risorsa di Azure.
Non esiste alcun segreto dell'applicazione da archiviare. Deve archiviare e ruotare i segreti nell'impostazione dell'app o nella variabile di ambiente.
Azure Identity SDK gestisce automaticamente i token in background. Ciò semplifica l'uso dell'autenticazione basata su token come stringa di connessione. I segreti non vengono gestiti.

L'uso di stringhe di connessione deve essere limitato alle app di verifica iniziali o ai prototipi di sviluppo che non accedono a dati sensibili o di produzione. In caso contrario, le classi di autenticazione basate su token disponibili in Azure SDK devono essere sempre preferite quando si esegue l'autenticazione alle risorse di Azure.

Usare l'SDK seguente:

DefaultAzureCredential

Il metodo DefaultAzureCredential di Azure SDK consente alle app di usare metodi di autenticazione diversi a seconda dell'ambiente in cui vengono eseguiti. In questo modo le app possono essere distribuite in ambienti locali, di test e di produzione senza modifiche al codice. Si configura il metodo di autenticazione appropriato per ogni ambiente e DefaultAzureCredential rileva e usa automaticamente tale metodo di autenticazione. L'uso di è preferibile rispetto alla codifica manuale della logica condizionale o dei flag di DefaultAzureCredential funzionalità per l'uso di metodi di autenticazione diversi in ambienti diversi.

I dettagli sull'uso della classe DefaultAzureCredential sono illustrati più avanti in questo articolo nella sezione Usare DefaultAzureCredential in un'applicazione.

Autenticazione negli ambienti server

Quando si ospita in un ambiente server, a ogni applicazione deve essere assegnata un'identità di applicazione univoca per ogni ambiente. In Azure un'identità dell'app è rappresentata da un'entità servizio, un tipo speciale di entità di sicurezza destinata a identificare ed autenticare le app in Azure. Il tipo di entità servizio da usare per l'app dipende dalla posizione in cui è in esecuzione l'app.

Autenticazione durante lo sviluppo locale

Quando un'applicazione viene eseguita nella workstation di uno sviluppatore durante lo sviluppo locale, l'ambiente locale deve comunque eseguire l'autenticazione a tutti i servizi di Azure usati dall'app.

Usare DefaultAzureCredential in un'applicazione

Per usare DefaultAzureCredential in un'app JavaScript, aggiungere il pacchetto di @azure/identità all'applicazione.

npm install @azure/identity

L'esempio di codice seguente illustra quindi come creare un'istanza di un DefaultAzureCredential oggetto e usarlo con una classe client di Azure SDK, in questo caso blobServiceClient usato per accedere all'archiviazione BLOB.

// connect-with-default-azure-credential.js
import { BlobServiceClient } from '@azure/storage-blob';
import { DefaultAzureCredential } from '@azure/identity';
import 'dotenv/config'

const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
if (!accountName) throw Error('Azure Storage accountName not found');

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

DefaultAzureCredential rileverà automaticamente il meccanismo di autenticazione configurato per l'app e otterrà i token necessari per autenticare l'app in Azure. Se un'applicazione usa più client SDK, è possibile usare lo stesso oggetto credenziale con ogni oggetto client SDK.

Sequenza di selezione dei metodi di autenticazione quando si usa DefaultAzureCredential

Internamente, DefaultAzureCredential implementa una catena di selezione dei provider di credenziali per l'autenticazione delle applicazioni nelle risorse di Azure. Ogni provider di credenziali è in grado di rilevare se le credenziali di quel tipo sono configurate per l'app. DefaultAzureCredential controlla in sequenza ogni provider in ordine e usa le credenziali del primo provider con credenziali configurate.

Se sono state configurate più credenziali, l'ordine di ricerca delle credenziali tramite la catena è importante.

L'ordine in cui DefaultAzureCredential cerca le credenziali per JavaScript è illustrato nel diagramma e nella tabella seguente.

Diagramma che mostra la sequenza in cui DefaultAzureCredential controlla per vedere quale origine di autenticazione è configurata per un'applicazione.

Esistono due percorsi:

  • Servizio distribuito (Azure o locale): la sequenza inizia con le variabili di ambiente, quindi l'identità gestita, quindi il resto delle posizioni per una credenziale (Visual Studio Code, interfaccia della riga di comando di Azure, Azure PowerShell).
  • Ambiente locale dello sviluppatore: la catena della workstation per sviluppatori locale inizia con l'utente di Azure connesso a Visual Studio Code, visualizzato nella barra inferiore dell'IDE, quindi passa all'interfaccia della riga di comando di Azure, quindi Azure PowerShell. È importante comprendere se sono state configurate le variabili di ambiente locali, per l'intero ambiente o l'ambiente virtuale di un progetto ( ad esempio con DOTENV), queste variabili eseguiranno l'override della catena di Visual Studio Code - Interfaccia della riga di comando di Azure ->> PowerShell perché sono le prime credenziali archiviate nella catena.
Tipo di credenziali Descrizione
Ambiente DefaultAzureCredential legge un set di variabili di ambiente per determinare se per l'app è stata impostata un'entità servizio applicazione (utente applicazione). In questo caso, DefaultAzureCredential usa questi valori per autenticare l'app in Azure.

Questo metodo viene usato più spesso negli ambienti server, ma può essere usato anche durante lo sviluppo in locale.
Identità gestita Se l'applicazione viene distribuita in un host di Azure con identità gestita abilitata, DefaultAzureCredential autentica l'app in Azure usando tale identità gestita. L'autenticazione con un'identità gestita è descritta nella sezione Autenticazione negli ambienti server di questo documento.

Questo metodo è disponibile solo quando un'applicazione è ospitata in Azure usando un servizio abilitato per l'identità gestita.
Visual Studio Code Se lo sviluppatore ha eseguito l'autenticazione in Azure usando il plug-in dell'account Azure di Visual Studio Code, DefaultAzureCredential autentica l'app in Azure usando lo stesso account.
Interfaccia della riga di comando di Azure Se uno sviluppatore ha eseguito l'autenticazione in Azure usando il comando az login nell'interfaccia della riga di comando di Azure, DefaultAzureCredential autentica l'app in Azure usando lo stesso account.
Azure PowerShell Se uno sviluppatore ha eseguito l'autenticazione in Azure usando il cmdlet Connect-AzAccount da Azure PowerShell, DefaultAzureCredentialautentica l'app in Azure usando lo stesso account.
Interattivo Se abilitata, DefaultAzureCredential autentica lo sviluppatore in modo interattivo tramite il browser predefinito del sistema corrente. L'opzione è disabilitata per impostazione predefinita.