Använda hanterad identitet med MSAL Node

Att hantera hemligheter, autentiseringsuppgifter, certifikat och nycklar som används för att skydda kommunikationen mellan olika tjänster kan vara en utmaning för utvecklare. Hanterade identiteter i Azure eliminera behovet av att utvecklare hanterar dessa autentiseringsuppgifter manuellt. MSAL Node har stöd för att hämta token via den hanterade identitetstjänsten när den används med program som körs i Azure infrastruktur, till exempel:

En fullständig lista finns i Azure tjänster som kan använda hanterade identiteter för att få åtkomst till andra tjänster.

Note

Webbläsarbaserade MSAL-bibliotek erbjuder inte hanterad identitet eftersom webbläsaren inte finns på Azure.

Vilken SDK ska användas – Azure SDKs eller MSAL?

Både MSAL Node och Azure SDKs gör det möjligt att hämta token via hanterad identitet. Internt använder Azure SDKs MSAL Node och tillhandahåller ett API på högre nivå via dess DefaultAzureCredential och ManagedIdentityCredential abstraktioner.

Om ditt program redan använder någon av SDK:erna fortsätter du att använda samma SDK. Använd Azure SDKs om du skriver ett nytt program och planerar att anropa andra Azure resurser, eftersom den här SDK:n ger en bättre utvecklarupplevelse genom att låta appen köras på privata utvecklardatorer där den hanterade identiteten inte finns. Överväg att använda MSAL om du behöver anropa andra underordnade webb-API:er som Microsoft Graph eller ditt eget webb-API.

Om du vill komma igång och se Azure hanterad identitet i praktiken kan du använda ett av msal node-hanterade identitetsexempel.

Så här använder du hanterade identiteter

Det finns två typer av hanterade identiteter som är tillgängliga för utvecklare – systemtilldelade och användartilldelade. Du kan lära dig mer om skillnaderna i artikeln Hanterade identitetstyper . MSAL Node stöder att hämta token med båda metoderna.

Innan du kan använda hanterade identiteter från MSAL Node måste du aktivera dem för de resurser som de vill använda via Azure CLI eller Azure-portalen.

Utvecklare kan använda ManagedIdentityApplication klassen för både användartilldelade och systemtilldelade identiteter.

Systemtilldelade hanterade identiteter

För systemtilldelade hanterade identiteter behöver utvecklaren inte skicka någon ytterligare information när en instans av ManagedIdentityApplication skapas, eftersom den automatiskt fastställer relevanta metadata för den tilldelade identiteten.

acquireToken anropas med resursen för att hämta en token för, till exempel https://management.azure.com.

import {
    ManagedIdentityApplication,
    ManagedIdentityConfiguration,
    ManagedIdentityRequestParams,
    NodeSystemOptions,
    LoggerOptions,
    LogLevel,
    AuthenticationResult
} from "@azure/msal-node";

const config: ManagedIdentityConfiguration = {
    system: {
        loggerOptions: {
            logLevel: LogLevel.Verbose,
        } as LoggerOptions,
    } as NodeSystemOptions,
};

const systemAssignedManagedIdentityApplication: ManagedIdentityApplication =
    new ManagedIdentityApplication(config);

const managedIdentityRequestParams: ManagedIdentityRequestParams = {
    resource: "https://management.azure.com",
};

const response: AuthenticationResult =
    await systemAssignedManagedIdentityApplication.acquireToken(
        managedIdentityRequestParams
    );
console.log(response);

Användartilldelade hanterade identiteter

För användartilldelade hanterade identiteter måste utvecklaren skicka antingen klient-ID, fullständig resursidentifierare eller objekt-ID för den hanterade identiteten när du skapar ManagedIdentityApplication.

Precis som i fallet med systemtilldelade hanterade identiteter anropas acquireToken med den resurs som en åtkomsttoken ska hämtas för.

import {
    ManagedIdentityApplication,
    ManagedIdentityConfiguration,
    ManagedIdentityIdParams,
    ManagedIdentityRequestParams,
    NodeSystemOptions,
    LoggerOptions,
    LogLevel,
    AuthenticationResult
} from "@azure/msal-node";

const managedIdentityIdParams: ManagedIdentityIdParams = {
    userAssignedClientId: "xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx",
};

const config: ManagedIdentityConfiguration = {
    managedIdentityIdParams,
    system: {
        loggerOptions: {
            logLevel: LogLevel.Verbose,
        } as LoggerOptions,
    } as NodeSystemOptions,
};

const userAssignedManagedIdentityApplication: ManagedIdentityApplication =
    new ManagedIdentityApplication(config);

const managedIdentityRequestParams: ManagedIdentityRequestParams = {
    resource: "https://management.azure.com",
};

const response: AuthenticationResult =
    await userAssignedManagedIdentityApplication.acquireToken(
        managedIdentityRequestParams
    );
console.log(response);

Caching

MSAL Node lagrar token från den hanterade identiteten i minnet. Det finns ingen borttagning, men minne är inte ett problem eftersom ett begränsat antal hanterade identiteter kan definieras. Utökningsbarhet för cache stöds inte i det här scenariot eftersom token inte ska delas mellan datorer.

Felsökning av vanliga fel

För misslyckade begäranden innehåller felsvaret ett korrelations-ID som kan användas för ytterligare diagnostik och logganalys. Tänk på att korrelations-ID:t som genereras i MSAL eller som skickas till MSAL skiljer sig från det som returneras i serverfelsvar, eftersom MSAL inte kan skicka korrelations-ID:t till slutpunkter för anskaffning av hanterad identitetstoken.

ManagedIdentityError — Felkod: invalid_resource

Felmeddelande: Den angivna resursen är en ogiltig URL.

Det här undantaget kan innebära att resursen som du försöker hämta en token för antingen inte stöds eller tillhandahålls med fel resurs-ID-format. Exempel på korrekta resurs-ID-format är https://management.azure.com/.default, https://management.azure.comoch https://graph.microsoft.com.