Använda MSAL Node med den inbyggda tokenförmedlaren (Windows)

Microsofts autentiseringsbibliotek-noden (MSAL) stöder hämtning av token från den interna tokenkoordinatorn. När du använder den inbyggda förmedlaren är uppdateringstoken bundna till den enhet där de hämtas och är inte åtkomliga för msal-node eller applikationen. Detta ger en högre säkerhetsnivå som inte kan uppnås enbart.msal-node

Den här artikeln beskriver hur du konfigurerar Windows-brokern, konfigurerar proof-of-possession och förstår brokerspecifikt beteende.

Broker-stöd är tillgängligt på följande plattformar:

Platform Broker Documentation
Windows Webbkontoansvarig (WAM) Windows-förmedlare (den här artikeln)
macOS Microsoft Enterprise SSO-insticksprogram (Company Portal) macOS-koordinator
Linux Microsoft enkel inloggning för Linux Linux-koordinator

Vad är en mäklare

En autentiseringskoordinator är en komponent som körs på en användares dator och hanterar handskakningar för autentisering och tokenlivscykel för anslutna konton. På Windows utförs den här rollen av Web Account Manager (WAM). Viktiga fördelar är:

  • Förbättrad säkerhet. Säkerhetsförbättringar levereras via os- eller koordinatoruppdateringar utan att appkodändringar krävs. Uppdateringstoken är enhetsbundna och skyddade från exfiltrering.
  • Funktionsstöd. Åtkomst till rika OS-funktioner som Windows Hello, principer för villkorsstyrd åtkomst i Microsoft Entra och säkerhetsnycklar för Fast Identity Online (FIDO) utan extra stödjande kod.
  • Systemintegrering. Program ansluts till den inbyggda kontoväljaren så att användarna snabbt kan välja ett befintligt konto i stället för att ange autentiseringsuppgifter igen.
  • Tokenskydd. Förmedlaren säkerställer att uppdateringstoken är enhetsbundna och gör det möjligt för appar att erhålla åtkomsttoken med innehavsbevis.

Arkitekturer som stöds

  • Windows: x64, x86, ARM64

Förutsättningar

  • Node.js 18 eller senare
  • Installera @azure/msal-node-extensions som ett beroende
  • Registrera förmedlarens omdirigerings-URI i appregistreringen. Det nödvändiga värdet finns i Omdirigerings-URI.

URI för omdirigering

Registrera följande omdirigerings-URI under plattformen för mobil- och skrivbordsprogram i Azure-portalen:

ms-appx-web://Microsoft.AAD.BrokerPlugin/<your-client-id>

Ersätt <your-client-id> med programmets klient-ID.

Aktivera funktionen

För att aktivera tokenutjämning krävs bara en konfigurationsparameter. Skicka en NativeBrokerPlugin instans i koordinatorkonfigurationen:

import { PublicClientApplication, Configuration } from "@azure/msal-node";
import { NativeBrokerPlugin } from "@azure/msal-node-extensions";

const msalConfig: Configuration = {
    auth: {
        clientId: "your-client-id",
    },
    broker: {
        nativeBrokerPlugin: new NativeBrokerPlugin(),
    },
};

const pca = new PublicClientApplication(msalConfig);

Note

msal-node kommer inte att återgå till det icke-asynkrona flödet i händelse av ett fel. Aktivera endast broker-flödet i miljöer som stöder det för att undvika oväntade fel.

Ett fungerande exempel finns i exemplet auth-code-cli-brokered-app.

Överordnat fönster

Om du vill att autentiseringsprompter ska visas över det anropande programmet och blockera ytterligare interaktion anger du programmets fönsterhandtag till API:et acquireTokenInteractive .

För CLI-appar görs ett bästa försök att hitta fönsterhandtaget under huven, men det är opålitligt.

Om du använder Electron använder du API:et getNativeWindowHandle och skickar resultatet till acquireTokenInteractive:

import { BrowserWindow } from "electron";

const win = new BrowserWindow();
const pca = new PublicClientApplication(msalConfig);

pca.acquireTokenInteractive({
    windowHandle: win.getNativeWindowHandle(),
});

Bevis på innehav

Bevis på innehav (PoP) för åtkomsttoken stöds när token hämtas via den interna brokern. Om du vill begära en PoP-token lägger du till följande egenskaper i begärandeobjektet som tillhandahålls till acquireTokenInteractive eller acquireTokenSilent:

Parametrar för AT PoP-begäran

Name Description Obligatoriskt
authenticationScheme Anger om MSAL ska hämta en Bearer- eller PoP-token. Standard är Bearer. Required
resourceRequestMethod Namnet på HTTP-metoden för den begäran som ska använda den signerade token (GET, POST, PUT, osv.) Required
resourceRequestUri URL:en för den skyddade resurs som åtkomsttoken utfärdas för Required
shrNonce En servergenererad, signerad tidsstämpel som är Base64URL-kodad som en sträng. Denna nonce används för att motverka klockdrift och tidsmanipuleringsattacker som syftar till att möjliggöra förgenerering av PoP-token. Valfritt

Användningsexempel

I det här exemplet begärs en proof-of-possession-token genom att ange autentiseringsschemat och signerade HTTP-begärandeegenskaper:

import { PublicClientApplication, Configuration, AuthenticationScheme } from "@azure/msal-node";
import { NativeBrokerPlugin } from "@azure/msal-node-extensions";

const msalConfig: Configuration = {
    auth: {
        clientId: "your-client-id",
    },
    broker: {
        nativeBrokerPlugin: new NativeBrokerPlugin(),
    },
};

const pca = new PublicClientApplication(msalConfig);

const popTokenRequest = {
    scopes: ["User.Read"],
    authenticationScheme: AuthenticationScheme.POP,
    resourceRequestMethod: "POST",
    resourceRequestUri: "YOUR_RESOURCE_ENDPOINT",
    shrNonce: "NONCE_ACQUIRED_FROM_RESOURCE_SERVER",
};

pca.acquireTokenInteractive(popTokenRequest);
pca.acquireTokenSilent(popTokenRequest);

Note

Innehavsbevis för åtkomsttoken stöds endast via det inbyggda brokerflödet och är inte tillgängligt i flödet utan broker.

Skillnader vid användning av Windows broker

Det finns några saker som kan fungera annorlunda när du hämtar token via den inbyggda brokerkomponenten:

  • Parametern forceRefresh för acquireTokenSilent anrop stöds inte. Du kan få en cachelagrad token från mäklaren oavsett hur den här flaggan är inställd.
  • Om mäklaren behöver fråga användaren om interaktion öppnas en systemprompt. Detta ändrar användarupplevelsen (UX) eftersom autentisering inte sker i ett webbläsarfönster.
  • Åtkomsttoken proof-of-possession stöds av koordinatorn men stöds inte av det icke-asynkrona flödet.