Verwenden von MSAL Node mit dem Linux-Broker

Microsoft Authentication Library (MSAL) (MSAL)-Knoten können das Microsoft Single Sign-On für Linux-Broker verwenden, um einmaliges Anmelden (Single Sign-On, SSO) und sichere Tokenakquisition für unterstützte Linux-Distributionen bereitzustellen. Der Broker verwaltet die Authentifizierungs-Handshakes und den Tokenlebenszyklus, sodass Benutzer von der Integration mit konten profitieren können, die dem System bekannt sind.

In diesem Artikel wird erläutert, was der Linux-Broker ist, welche Verteilungen es unterstützt, und wie Sie die Vermittlung von Tokenakquisition in einer Node.js-App aktivieren.

Eine Übersicht über die Brokerunterstützung auf allen Plattformen finden Sie unter Verwenden des MSAL-Knotens mit dem nativen Tokenbroker.

Was ist der Linux-Broker

Das Microsoft Single Sign-On für Linux ist ein Authentifizierungsbroker, der unabhängig von der Linux-Verteilung ausgeliefert wird. Installieren Sie es mit einem Paket-Manager (sudo apt install microsoft-identity-broker oder sudo dnf install microsoft-identity-broker). Es wird auch als Abhängigkeit von Microsoft Anwendungen wie Unternehmensportal gebündelt.

Die wichtigsten Vorteile umfassen Folgendes:

  • Einmaliges Anmelden. Vereinfacht die Authentifizierung von Benutzern mit Microsoft Entra ID und schützt Aktualisierungstoken vor Exfiltration und Missbrauch.
  • Verbesserte Sicherheit. Sicherheitsverbesserungen werden über Brokerupdates bereitgestellt, ohne dass App-Codeänderungen erforderlich sind.
  • Tokenschutz. Der Broker stellt sicher, dass Aktualisierungstoken gerätegebunden sind.
  • Systemintegration. Anwendungen greifen auf die integrierte Kontoauswahl zu, sodass Nutzer schnell ein vorhandenes Konto auswählen können.

Unterstützte Distributionen

  • Ubuntu 22.04 / 24.04 (x64)
  • Red Hat Enterprise Linux (RHEL) 8 / 9 / 10 (x64)

Voraussetzungen

  • Node.js 18 oder höher
  • Installieren Sie @azure/msal-node-extensions als Abhängigkeit
  • microsoft-identity-broker muss auf dem Gerät installiert sein
  • Registrieren Sie die Broker-Umleitungs-URI in Ihrer App-Registrierung (siehe Umleitungs-URI unten)
  • Installieren der erforderlichen Systemabhängigkeiten (siehe Systemabhängigkeiten unten)

Umleitungs-URI

Registrieren Sie bei Linux-Broker-Flows die folgende Umleitungs-URI unter der Plattform für Mobile Anwendungen und Desktopanwendungen im Azure-Portal:

https://login.microsoftonline.com/common/oauth2/nativeclient

Systembedingte Abhängigkeiten

Ubuntu 22.04/24.04

sudo apt install libsecret-1-0 libdbus-1-3
  • libsecret — Speichert Authentifizierungs-Token sicher im System-Schlüsselbund und ruft sie daraus ab (GNOME Keyring oder KDE Wallet).
  • dbus – Prozessübergreifende Kommunikation mit dem Authentifizierungsbroker. Ein D-Bus Session-Bus muss ausgeführt werden (Standard in Desktopumgebungen; Headless-Server benötigen dbus-run-session oder gleichwertig).
sudo apt install libwebkit2gtk-4.1-0 libgtk-3-0
  • WebKitGTK – Stellt den eingebetteten Browser für die interaktive Anmeldebenutzeroberfläche bereit.
  • GTK – Das zugrunde liegende UI-Toolkit, das von WebKitGTK benötigt wird.

Die Funktion aktivieren

Das Aktivieren des Linux-Brokers verwendet dieselbe Konfiguration wie Windows und macOS. Übergeben Sie eine NativeBrokerPlugin Instanz in der Brokerkonfiguration:

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 wechselt nicht zu einem browserbasierten Ablauf, wenn der Broker nicht verfügbar ist. Aktivieren Sie nur die vermittelte Authentifizierung auf unterstützten Linux-Geräten, um unerwartete Fehler zu vermeiden.

Token beziehen

Interaktive Tokenerfassung

Verwenden Sie acquireTokenInteractive, um über den Linux-Broker ein Token anzufordern:

const tokenRequest = {
    scopes: ["User.Read"],
};

const result = await pca.acquireTokenInteractive(tokenRequest);
console.log("Access token:", result.accessToken);

Automatischer Tokenabruf

Nach einer ersten interaktiven Anmeldung können nachfolgende Tokenanforderungen ohne Benutzerinteraktion erfolgen:

const accounts = await pca.getAllAccounts();

if (accounts.length > 0) {
    const silentRequest = {
        scopes: ["User.Read"],
        account: accounts[0],
    };

    const result = await pca.acquireTokenSilent(silentRequest);
    console.log("Access token (silent):", result.accessToken);
}

Zwischenspeichern von Tokens

Der Authentifizierungsbroker verarbeitet das Zwischenspeichern von Aktualisierungs- und Zugriffstoken. Token, die über den Broker erworben werden, werden vom Broker selbst verwaltet und sind gerätegebunden. Sie müssen bei Verwendung des Brokers keine benutzerdefinierte Zwischenspeicherung einrichten.

Unterschiede bei der Verwendung des Linux-Brokers

  • Wenn der Broker zur Interaktion auffordern muss, wird ein systemeigenes Anmeldedialogfeld (WebKitGTK-basiert) angezeigt. Dadurch wird die Benutzeroberfläche (User Experience, UX) im Vergleich zur browserbasierten Authentifizierung geändert.
  • Der Parameter forceRefresh für acquireTokenSilent wird nicht unterstützt. Sie können unabhängig von dieser Kennzeichnung ein zwischengespeichertes Token vom Broker erhalten.
  • Ein D-Bus Session-Bus muss ausgeführt werden, damit die Broker-Kommunikation funktioniert.

Einschränkungen

  • Azure AD B2C- und Active Directory-Verbunddienste (AD FS)(AD FS)-Behörden werden nicht über den Linux-Broker unterstützt.
  • Identitätsanbieter von Drittanbietern (IDPs) werden nicht unterstützt.
  • microsoft-identity-broker muss auf dem Gerät installiert sein, damit der Broker funktioniert.
  • msal-node greift nicht auf einen Browser zurück, wenn der Broker nicht verfügbar ist. Aktivieren Sie den Broker nur in Umgebungen, die ihn unterstützen.
  • Zugriffstoken-Besitznachweis (PoP) wird derzeit nicht über den Linux-Broker unterstützt.