Verwenden Sie MCP-Flüsse mit MSAL Node

Beim Erstellen von Anwendungen mit dem Model Context Protocol (MCP) können Sie MSAL Node so konfigurieren, dass ressourcenbezogener Tokenerwerb und Caching erzwungen werden. Wenn der MCP-Modus aktiviert ist, verlangt MSAL, dass jede Tokenanforderung einen resource-Parameter enthält, und speichert Zugriffstoken unter Verwendung dieser Ressource als Schlüssel im Cache.

Note

MCP-Flüsse sind nur für öffentliche Clientanwendungen verfügbar.

Voraussetzungen

AKTIVIEREN des MCP-Modus

Legen Sie isMcp: true in der auth-Konfiguration fest, wenn Sie Ihr PublicClientApplication erstellen:

const config = {
    auth: {
        clientId: "your-client-id",
        authority: "https://login.microsoftonline.com/common",
        isMcp: true,
    },
};

const pca = new msal.PublicClientApplication(config);

Einschließen des Ressourcenparameters

Wenn isMcp auf true gesetzt ist, muss jede Tokenanforderung den Parameter resource enthalten. Wenn sie weggelassen wird, wird ein resource_parameter_required Fehler ausgelöst.

const tokenRequest = {
    scopes: ["User.Read"],
    redirectUri: "http://localhost:3000/redirect",
    resource: "https://example.microsoft.com",
    code: authorizationCode,
};

const response = await pca.acquireTokenByCode(tokenRequest);

Important

Legen Sie den resource Parameter direkt für das Anforderungsobjekt fest. Übergeben Sie sie nicht über extraQueryParameters gleichzeitig mit der resource-Eigenschaft — andernfalls wird ein misplaced_resource_parameter-Fehler ausgelöst.

Das folgende Beispiel zeigt die richtigen und falschen Methoden zum Festlegen des resource Parameters:

// Correct — resource on the request object
const request = {
    scopes: ["User.Read"],
    resource: "https://example.microsoft.com",
};

// Wrong — resource in both locations
const request = {
    scopes: ["User.Read"],
    resource: "https://example.microsoft.com",
    extraQueryParameters: { resource: "https://example.microsoft.com" },
};

Ressourcenbezogenes Caching

Wenn isMcp diese Option aktiviert ist, werden Zugriffstoken mit ihrer zugeordneten Ressource zwischengespeichert. Dies wirkt sich auf den stillen Tokenabruf aus:

  • Cachetreffer: Wenn ein zwischengespeichertes Zugriffstoken für dieselben Bereiche und Ressourcen vorhanden ist, wird es aus dem Cache zurückgegeben.
  • Cachefehler: Wenn die angeforderte Ressource keinem zwischengespeicherten Token entspricht, greift MSAL auf das Netzwerk zurück, um ein neues Token für die angeforderte Ressource abzurufen.
const msalTokenCache = pca.getTokenCache();
const accounts = await msalTokenCache.getAllAccounts();

// First request — acquires token from network
const token1 = await pca.acquireTokenSilent({
    scopes: ["User.Read"],
    resource: "https://resource-a.microsoft.com",
    account: accounts[0],
});

// Same resource — returns cached token
const token2 = await pca.acquireTokenSilent({
    scopes: ["User.Read"],
    resource: "https://resource-a.microsoft.com",
    account: accounts[0],
});

// Different resource — falls back to network
const token3 = await pca.acquireTokenSilent({
    scopes: ["User.Read"],
    resource: "https://resource-b.microsoft.com",
    account: accounts[0],
});

Fehlerbehandlung

Zwei Fehler sind für MCP-Flüsse spezifisch:

Fehlercode Description
resource_parameter_required isMcp ist true, aber die Anfrage enthält keinen Parameter resource.
misplaced_resource_parameter Ein resource wurde sowohl in der resource-Eigenschaft als auch in extraQueryParameters gefunden. Verwenden Sie nur eine.

Beide Fehler werden als ClientAuthError ausgegeben. Weitere Informationen finden Sie in den häufig gestellten Fragen zu MSAL-Knoten.

Beispiele

  • MCP Flows-Beispiel – Express-App, die MCP mit Autorisierungscode und unbeaufsichtigten Flüssen demonstriert.

Nächste Schritte