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.
Approccio consigliato per l'autenticazione delle app
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. |
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.
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, DefaultAzureCredential autentica 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. |