Dela via


Autentisera JavaScript-appar med Azure-värd till Azure-resurser med hjälp av en användartilldelad hanterad identitet

Den rekommenderade metoden för att autentisera en Azure-värdbaserad app till andra Azure-resurser är att använda en hanterad identitet. Den här metoden stöds för de flesta Azure-tjänster, inklusive appar som finns i Azure App Service, Azure Container Apps och Azure Virtual Machines. Upptäck mer om olika autentiseringstekniker och autentiseringsmetoder på översiktssidan för autentisering . I de kommande avsnitten får du lära dig:

  • Grundläggande begrepp för hanterad identitet
  • Så här skapar du en användartilldelad hanterad identitet för din app
  • Så här tilldelar du roller till den användartilldelade hanterade identiteten
  • Autentisera med hjälp av den användartilldelade hanterade identiteten från din appkod

Grundläggande begrepp för hanterad identitet

Med en hanterad identitet kan din app på ett säkert sätt ansluta till andra Azure-resurser utan att använda hemliga nycklar eller andra programhemligheter. Internt spårar Azure identiteten och vilka resurser den tillåts ansluta till. Azure använder den här informationen för att automatiskt hämta Microsoft Entra-token för appen så att den kan ansluta till andra Azure-resurser.

Det finns två typer av hanterade identiteter att tänka på när du konfigurerar din värdbaserade app:

  • Systemtilldelade hanterade identiteter aktiveras direkt på en Azure-resurs och är knutna till dess livscykel. När resursen tas bort tar Azure automatiskt bort identiteten åt dig. Systemtilldelade identiteter ger en minimalistisk metod för att använda hanterade identiteter.
  • Användartilldelade hanterade identiteter skapas som fristående Azure-resurser och ger större flexibilitet och funktioner. De är idealiska för lösningar som omfattar flera Azure-resurser som behöver dela samma identitet och behörigheter. Om till exempel flera virtuella datorer behöver komma åt samma uppsättning Azure-resurser, ger en användartilldelad hanterad identitet återanvändning och optimerad hantering.

Tips/Råd

Läs mer om hur du väljer och hanterar systemtilldelade och användartilldelade hanterade identiteter i artikeln Rekommenderade metoder för hanterad identitet .

I följande avsnitt beskrivs stegen för att aktivera och använda en användartilldelad hanterad identitet för en Azure-värdbaserad app. Om du behöver använda en systemtilldelad hanterad identitet kan du läsa artikeln om systemtilldelade hanterade identiteter för mer information.

Skapa en användartilldelad hanterad identitet

Användartilldelade hanterade identiteter skapas som fristående resurser i din Azure-prenumeration med hjälp av Azure-portalen eller Azure CLI. Azure CLI-kommandon kan köras i Azure Cloud Shell eller på en arbetsstation med Azure CLI installerat.

  1. I Azure-portalen anger du Hanterade identiteter i huvudsökfältet och väljer matchande resultat under avsnittet Tjänster .

  2. På sidan Hanterade identiteter väljer du + Skapa.

    En skärmbild som visar sidan för att hantera användartilldelade hanterade identiteter.

  3. På sidan Skapa användartilldelad hanterad identitet väljer du en prenumeration, resursgrupp och region för den användartilldelade hanterade identiteten och anger sedan ett namn.

  4. Välj Granska + skapa för att granska och verifiera dina indata.

    En skärmbild som visar formuläret för att skapa en användartilldelad hanterad identitet.

  5. Välj Skapa för att skapa den användartilldelade hanterade identiteten.

  6. När identiteten har skapats väljer du Gå till resurs.

  7. På den nya identitetens översiktssida kopierar du det klient-ID-värde som ska användas för senare när du konfigurerar programkoden.

Tilldela den hanterade identiteten till din app

En användartilldelad hanterad identitet kan associeras med en eller flera Azure-resurser. Alla resurser som använder den identiteten får de behörigheter som tillämpas via identitetens roller.

  1. I Azure-portalen navigerar du till resursen som är värd för din appkod, till exempel en Azure App Service- eller Azure Container App-instans.

  2. På resursens översiktssida expanderar du Inställningar och väljer Identitet i navigeringen.

  3. På sidan Identitet växlar du till fliken Användartilldelad .

  4. Välj + Lägg till för att öppna panelen Lägg till användartilldelad hanterad identitet .

  5. I panelen Lägg till användartilldelad hanterad identitet använder du listrutan Prenumeration för att filtrera sökresultaten för dina identiteter. Använd sökrutan Användartilldelade hanterade identiteter för att hitta den användartilldelade hanterade identiteten som du aktiverade för Azure-resursen som är värd för din app.

  6. Välj identiteten och välj Lägg till längst ned i panelen för att fortsätta.

    En skärmbild som visar hur du associerar en användartilldelad hanterad identitet med en app.

Tilldela roller till den hanterade identiteten

Bestäm sedan vilka roller din app behöver och tilldela dessa roller till den hanterade identiteten. Du kan tilldela roller till en hanterad identitet i följande omfång:

  • Resurs: De tilldelade rollerna gäller endast för den specifika resursen.
  • Resursgrupp: De tilldelade rollerna gäller för alla resurser i resursgruppen.
  • Prenumeration: De tilldelade rollerna gäller för alla resurser som ingår i prenumerationen.

I följande exempel visas hur du tilldelar roller i resursgruppens omfång, eftersom många appar hanterar alla sina relaterade Azure-resurser med hjälp av en enda resursgrupp.

  1. Gå till sidan Översikt för resursgruppen som innehåller appen med den användartilldelade hanterade identiteten.

  2. Välj Åtkomstkontroll (IAM) i det vänstra navigeringsfältet.

  3. På sidan Åtkomstkontroll (IAM) väljer du + Lägg till på den översta menyn och väljer sedan Lägg till rolltilldelning för att navigera till sidan Lägg till rolltilldelning .

    En skärmbild som visar hur du kommer åt sidan för identitetsrolltilldelning.

  4. Sidan Lägg till rolltilldelning visar ett tabbat arbetsflöde i flera steg för att tilldela roller till identiteter. På den första fliken Roll använder du sökrutan längst upp för att hitta den roll som du vill tilldela identiteten.

  5. Välj rollen i resultatet och välj sedan Nästa för att gå till fliken Medlemmar .

  6. För alternativet Tilldela åtkomst till väljer du Hanterad identitet.

  7. För alternativet Medlemmar väljer du + Välj medlemmar för att öppna panelen Välj hanterade identiteter .

  8. På panelen Välj hanterade identiteter använder du listrutorna Prenumeration och Hanterad identitet för att filtrera sökresultaten för dina identiteter. Använd rutan Välj sök för att hitta den användartilldelade hanterade identiteten som du har aktiverat för Azure-resursen som är värd för din app.

    En skärmbild som visar processen för tilldelning av hanterad identitet.

  9. Välj identiteten och välj Välj längst ned i panelen för att fortsätta.

  10. Välj Granska + tilldela längst ned på sidan.

  11. På den sista fliken Granska + tilldela väljer du Granska + tilldela för att slutföra arbetsflödet.

Autentisera till Azure-tjänster från din app

Azure Identity-biblioteket innehåller olika autentiseringsuppgifter – implementeringar av TokenCredential anpassade för att stödja olika scenarier och Microsoft Entra-autentiseringsflöden. Eftersom den hanterade identiteten inte är tillgänglig när den körs lokalt visar stegen framåt vilka autentiseringsuppgifter som ska användas i vilket scenario:

  • Lokal utvecklingsmiljö: Använd endast en klass med namnet DefaultAzureCredential för en åsiktsbaserad, förkonfigurerad kedja med autentiseringsuppgifter. DefaultAzureCredential identifierar användarautentiseringsuppgifter från dina lokala verktyg eller IDE, till exempel Azure CLI eller Visual Studio Code. Det ger också flexibilitet och bekvämlighet för återförsök, väntetider för svar och stöd för flera autentiseringsalternativ. Mer information finns i artikeln Autentisera till Azure-tjänster under lokal utveckling .
  • Azure-värdbaserade appar: När din app körs i Azure kan du använda ManagedIdentityCredential för att på ett säkert sätt identifiera den hanterade identitet som konfigurerats för din app. Om du anger den här exakta typen av autentiseringsuppgifter förhindrar du att andra tillgängliga autentiseringsuppgifter oväntat hämtas.

Implementera koden

I ett JavaScript-projekt lägger du till paketet @azure/identitet . I valfri terminal går du till programprojektkatalogen och kör följande kommandon:

npm install @azure/identity

Azure-tjänster används med hjälp av specialiserade klientklasser från de olika Azure SDK-klientbiblioteken. I index.jsutför du följande steg för att konfigurera tokenbaserad autentisering:

  1. Importera paketet @azure/identity .
  2. Skicka en lämplig TokenCredential instans till klienten:
    • Använd DefaultAzureCredential när appen körs lokalt.
    • Använd ManagedIdentityCredential när din app körs i Azure och konfigurera antingen klient-ID, resurs-ID eller objekt-ID.

Klient-ID:t används för att identifiera en hanterad identitet när program eller tjänster som behöver autentiseras med den identiteten konfigureras.

  1. Hämta det klient-ID som tilldelats en användartilldelad hanterad identitet med hjälp av följande kommando:

    az identity show \
        --resource-group <resource-group-name> \
        --name <identity-name> \
        --query 'clientId'
    
  2. Konfigurera ManagedIdentityCredential med klient-ID:t:

    import { BlobServiceClient } from '@azure/storage-blob';
    import { ManagedIdentityCredential, DefaultAzureCredential } from '@azure/identity';
    
    console.log(process.env);
    
    function createBlobServiceClient() {
        const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
        if (!accountName) throw Error('Azure Storage accountName not found');
        const url = `https://${accountName}.blob.core.windows.net`;
    
        if (process.env.NODE_ENV === "production") {
            const clientId = process.env.AZURE_CLIENT_ID;
            if (!clientId) throw Error('AZURE_CLIENT_ID not found for Managed Identity');
            return new BlobServiceClient(url, new ManagedIdentityCredential(clientId));
        } else {
            return new BlobServiceClient(url, new DefaultAzureCredential());
        }
    }
    
    async function main() {
        try {
            const blobServiceClient = createBlobServiceClient();
            const containerClient = blobServiceClient.getContainerClient(process.env.AZURE_STORAGE_CONTAINER_NAME);
            // do something with client
            const properties = await containerClient.getProperties();
    
            console.log(properties);
        } catch (err) {
            console.error("Error retrieving container properties:", err.message);
            throw err;
        }
    }
    
    main().catch((err) => {
        console.error("Error running sample:", err.message);
        process.exit(1);
    });
    

Implementera koden

I ett TypeScript-projekt lägger du till paketet @azure/identitet . I valfri terminal går du till programprojektkatalogen och kör följande kommandon:

npm install typescript @azure/identity @types/node

Azure-tjänster används med hjälp av specialiserade klientklasser från de olika Azure SDK-klientbiblioteken. I index.jsutför du följande steg för att konfigurera tokenbaserad autentisering:

  1. Importera paketet @azure/identity .
  2. Skicka en lämplig TokenCredential instans till klienten:
    • Använd DefaultAzureCredential när din app körs lokalt
    • Använd ManagedIdentityCredential när din app körs i Azure och konfigurera antingen klient-ID, resurs-ID eller objekt-ID.

Klient-ID:t används för att identifiera en hanterad identitet när program eller tjänster som behöver autentiseras med den identiteten konfigureras.

  1. Hämta det klient-ID som tilldelats en användartilldelad hanterad identitet med hjälp av följande kommando:

    az identity show \
        --resource-group <resource-group-name> \
        --name <identity-name> \
        --query 'clientId'
    
  2. Konfigurera ManagedIdentityCredential med klient-ID:t:

    import { BlobServiceClient } from '@azure/storage-blob';
    import { ManagedIdentityCredential, DefaultAzureCredential } from '@azure/identity';
    
    function createBlobServiceClient(): BlobServiceClient {
        const accountName = process.env.AZURE_STORAGE_ACCOUNT_NAME;
        if (!accountName) throw Error('Azure Storage accountName not found');
        const url = `https://${accountName}.blob.core.windows.net`;
    
        if (process.env.NODE_ENV === "production") {
            const clientId = process.env.AZURE_CLIENT_ID;
            if (!clientId) throw Error('AZURE_CLIENT_ID not found for Managed Identity');
            return new BlobServiceClient(url, new ManagedIdentityCredential(clientId));
        } else {
            return new BlobServiceClient(url, new DefaultAzureCredential());
        }
    }
    
    async function main(): Promise<void> {
        try {
            const blobServiceClient = createBlobServiceClient();
            const containerClient = blobServiceClient.getContainerClient(process.env.AZURE_STORAGE_CONTAINER_NAME!);
            const properties = await containerClient.getProperties();
    
            console.log(properties);
        } catch (err: any) {
            console.error("Error retrieving container properties:", err.message);
            throw err;
        }
    }
    
    main().catch((err: Error) => {
        console.error("Error running sample:", err.message);
        process.exit(1);
    });
    

Föregående kod fungerar annorlunda beroende på vilken miljö den körs i:

  • På din lokala utvecklingsarbetsstation DefaultAzureCredential letar du i miljövariablerna efter ett huvudnamn för programtjänsten eller lokalt installerade utvecklarverktyg, till exempel Visual Studio Code, för en uppsättning autentiseringsuppgifter för utvecklare.
  • När du distribuerar till Azure ManagedIdentityCredential identifierar du dina hanterade identitetskonfigurationer för att autentisera till andra tjänster automatiskt.