MSAL Node gebruiken met de Native Token Broker (Windows)

Microsoft Authentication Library -knooppunt (MSAL) ondersteunt het verkrijgen van tokens van de systeemeigen tokenbroker. Wanneer u de natieve broker gebruikt, zijn verversingstokens gekoppeld aan het apparaat waarop ze zijn verkregen en zijn ze niet toegankelijk voor msal-node of de toepassing. Dit biedt een hoger beveiligingsniveau dat met msal-node alleen niet kan worden bereikt.

In dit artikel wordt uitgelegd hoe u de Windows broker configureert, bewijs van bezit instelt en inzicht geeft in het brokerspecifieke gedrag.

Broker-ondersteuning is beschikbaar op de volgende platforms:

Platform Broker Documentatie
Windows Webaccountbeheerder (WAM) Windows broker (dit artikel)
macOS Microsoft Enterprise SSO-invoegtoepassing (Bedrijfsportal) macOS-broker
Linux Microsoft eenmalig aanmelden voor Linux Linux-broker

Wat is een broker?

Een verificatiebroker is een onderdeel dat wordt uitgevoerd op de computer van een gebruiker en die de verificatiehanddruk- en tokenlevenscyclus voor verbonden accounts beheert. Op Windows wordt deze rol uitgevoerd door Web Account Manager (WAM). Belangrijke voordelen zijn onder andere:

  • Verbeterde beveiliging. Beveiligingsverbeteringen worden geleverd via besturingssysteem- of broker-updates zonder dat er app-codewijzigingen nodig zijn. Refresh-tokens zijn apparaatgebonden en beschermd tegen gegevensdiefstal.
  • Functieondersteuning. Toegang tot uitgebreide besturingssysteemmogelijkheden, zoals Windows Hello, Microsoft Entra Voorwaardelijke toegang-beleid en FIDO-beveiligingssleutels (Fast Identity Online) zonder extra scaffolding-code.
  • Systeemintegratie. Toepassingen worden aangesloten op de ingebouwde accountkiezer, zodat gebruikers snel een bestaand account kunnen selecteren in plaats van referenties opnieuw in te voeren.
  • Tokenbeveiliging. De broker zorgt ervoor dat vernieuwingstokens apparaatgebonden zijn en stelt apps in staat om toegangstokens voor bewijs van eigendom te verkrijgen.

Ondersteunde architecturen

  • Windows: x64, x86, ARM64

Prerequisites

  • Node.js 18 of hoger
  • Installeer @azure/msal-node-extensions als afhankelijkheid
  • Registreer de omleidings-URI van de broker bij de registratie van uw app. Zie Omleidings-URI voor de vereiste waarde.

Omleidings-URL

Registreer de volgende omleidings-URI onder het platform voor mobiele toepassingen en desktoptoepassingen in de Azure-portal:

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

Vervang door <your-client-id> de client-id van uw toepassing.

De functie inschakelen

Voor het inschakelen van tokenbrokering is slechts één configuratieparameter vereist. Geef een NativeBrokerPlugin exemplaar door in de brokerconfiguratie:

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 valt niet terug op de niet-bemiddelde stroom bij een fout. Schakel alleen de brokerstroom in omgevingen in die deze ondersteunen om onverwachte fouten te voorkomen.

Een werkend voorbeeld vindt u in het voorbeeld auth-code-cli-brokered-app.

Vensterhiërarchie

Als u verificatieprompts wilt weergeven via de aanroepende toepassing en verdere interactie wilt blokkeren, geeft u de venstergreep van de toepassing aan de acquireTokenInteractive API.

Voor CLI-apps wordt er achter de schermen zo goed mogelijk geprobeerd de venster-handle te vinden, maar dat is onbetrouwbaar.

Als u Electron gebruikt, gebruikt u de getNativeWindowHandle API en geeft u het resultaat door aan acquireTokenInteractive:

import { BrowserWindow } from "electron";

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

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

Bewijs van bezit

Bewijs van bezit (PoP) voor toegangstokens wordt ondersteund bij het ophalen van tokens via de native broker. Als u een PoP-token wilt aanvragen, voegt u de volgende eigenschappen toe aan het aanvraagobject dat is verstrekt aan acquireTokenInteractive of acquireTokenSilent:

AT PoP-aanvraagparameters

Naam Description Vereist
authenticationScheme Geeft aan of MSAL een Bearer of PoP token moet verkrijgen. De standaardwaarde is Bearer. Required
resourceRequestMethod De all-caps-naam van de HTTP-methode van de aanvraag die gebruikmaakt van het ondertekende token (GET, POSTPUT, enzovoort) Required
resourceRequestUri De URL van de beveiligde resource waarvoor het toegangstoken wordt uitgegeven Required
shrNonce Een door de server gegenereerde, ondertekende tijdstempel die als tekenreeks in Base64URL is gecodeerd. Deze nonce wordt gebruikt om klokafwijkingen en time-travelaanvallen te beperken die bedoeld zijn om het vooraf genereren van PoP-tokens mogelijk te maken. Optioneel

Gebruiksvoorbeeld

In dit voorbeeld wordt een proof-of-possession-token aangevraagd door het verificatieschema en ondertekende EIGENSCHAPPEN van HTTP-aanvragen in te stellen:

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

Toegangstokenbewijs wordt alleen ondersteund via de systeemeigen brokerstroom en is niet beschikbaar in de niet-brokerstroom.

Verschillen bij het gebruik van de Windows broker

Er zijn enkele dingen die zich mogelijk anders gedragen bij het verkrijgen van tokens via de systeemeigen broker:

  • De forceRefresh parameter voor acquireTokenSilent aanroepen wordt niet ondersteund. Mogelijk ontvangt u een token uit de cache van de broker, ongeacht hoe deze vlag is ingesteld.
  • Als de broker de gebruiker om interactie moet vragen, wordt er een systeemprompt geopend. Hierdoor wordt de gebruikerservaring (UX) gewijzigd omdat verificatie niet plaatsvindt in een browservenster.
  • Het bewijs van eigendom van het toegangstoken wordt ondersteund door de broker, maar wordt niet ondersteund door de niet-broker-stroom.