Come autenticare le app JavaScript ospitate in Azure nelle risorse di Azure usando la libreria di identità di Azure
Quando un'app è ospitata in Azure (usando un servizio come Servizio app di Azure, Funzioni di Azure o App contenitore di Azure), è possibile usare un'identità gestita per autenticare in modo sicuro l'app nelle risorse di Azure.
Un'identità gestita fornisce un'identità per l'app, consentendo la connessione ad altre risorse di Azure senza dover usare un segreto, ad esempio una stringa di connessione o una chiave. Internamente, Azure riconosce l'identità dell'app e conosce le risorse a cui l'app è autorizzata ad accedere. Azure usa queste informazioni per ottenere automaticamente i token di Microsoft Entra per l'app, consentendogli di connettersi ad altre risorse di Azure senza richiedere la gestione (creazione o rotazione) dei segreti di autenticazione.
Tipi di identità gestita
Sono disponibili due tipi di identità gestite:
- Identità gestite assegnate dal sistema - singola risorsa di Azure
- Identità gestite assegnate dall'utente - più risorse di Azure
Questo articolo illustra i passaggi per abilitare e usare un'identità gestita assegnata dal sistema per un'app. Se è necessario usare un'identità gestita assegnata dall'utente, vedere l'articolo Gestire le identità gestite assegnate dall'utente per informazioni su come creare un'identità gestita assegnata dall'utente.
Identità gestite assegnate dal sistema per una singola risorsa
Le identità gestite assegnate dal sistema vengono fornite e collegate direttamente a una risorsa di Azure. Quando si abilita l'identità gestita in una risorsa di Azure, si ottiene un'identità gestita assegnata dal sistema per tale risorsa. L'identità gestita è associata al ciclo di vita della risorsa di Azure. Quando la risorsa viene eliminata, Azure elimina automaticamente anche l'identità. Poiché è necessario abilitare l'identità gestita per la risorsa di Azure che ospita il codice, questo tipo di identità è il tipo più semplice di identità gestita da usare.
Identità gestite assegnate dall'utente per più risorse
Un'identità gestita assegnata dall'utente è una risorsa di Azure autonoma. Questo tipo di identità viene usato più di frequente quando la soluzione ha più carichi di lavoro eseguiti su più risorse di Azure che devono tutti condividere la stessa identità e le stesse autorizzazioni. Si supponga, ad esempio, che la soluzione includa applicazioni eseguite in più istanze del servizio app e delle macchine virtuali. Tutte le applicazioni devono accedere allo stesso set di risorse di Azure. La creazione e l'uso di un'identità gestita assegnata dall'utente tra queste risorse è la scelta migliore per la progettazione.
1 - Abilitare l'identità gestita assegnata dal sistema nell'app ospitata
Il primo passaggio consiste nell'abilitare l'identità gestita nella risorsa di Azure che ospita l'app. Ad esempio, se si ospita un'applicazione Express.js usando servizio app di Azure, è necessario abilitare l'identità gestita per l'app Web del servizio app. Se si usa una macchina virtuale per ospitare l'app, è possibile abilitare la macchina virtuale per l'uso dell'identità gestita.
È possibile abilitare l'uso dell'identità gestita per una risorsa di Azure usando il portale di Azure o l'interfaccia della riga di comando di Azure.
2 - Assegnare ruoli all'identità gestita
Come passaggio successivo occorre determinare i ruoli (autorizzazioni) necessari per l'app e assegnare l'identità gestita a tali ruoli in Azure. A un'identità gestita è possibile assegnare ruoli a livello di risorsa, gruppo di risorse o sottoscrizione. Questo esempio illustra come assegnare ruoli nell'ambito del gruppo di risorse perché la maggior parte delle applicazioni raggruppa tutte le risorse di Azure in un singolo gruppo di risorse.
3 - Implementare DefaultAzureCredential nell'applicazione
DefaultAzureCredential rileva automaticamente che viene usata un'identità gestita e usa l'identità gestita per l'autenticazione ad altre risorse di Azure. Come descritto nell'articolo della libreria di identità di Azure per l'autenticazione JavaScript, 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.
Aggiungere prima di tutto il pacchetto di @azure/identità all'applicazione.
npm install @azure/identity
Successivamente, per qualsiasi codice JavaScript che crea un oggetto client azure SDK nell'app, si vuole:
- Importare la
DefaultAzureCredential
classe dal@azure/identity
modulo. - Creare un oggetto
DefaultAzureCredential
. - Passare l'oggetto al costruttore dell'oggetto
DefaultAzureCredential
client di Azure SDK.
Un esempio di questi passaggi è illustrato nel segmento di codice seguente.
// 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()
);