Verwenden von MCP-Flüssen mit MSAL-Browser

Model Context Protocol (MCP) ist ein offener Standard, mit dem KI-Anwendungen sicher mit externen Tools, Datenquellen und Diensten verbunden werden können. MSAL Browser unterstützt MCP-Flüsse, indem sichergestellt wird, dass alle Tokenanforderungen einen resource-Parameter enthalten und Zugriffstoken mit dieser Ressource als Schlüssel zwischengespeichert werden.

Note

MCP-Flüsse werden sowohl für Standardbrowseranwendungen mit PublicClientApplication als auch für NAA-Anwendungen (Nested App Authentication) mit createNestablePublicClientApplication unterstützt.

Informationen zu serverseitigen Implementierungen finden Sie unter MSAL Node MCP Flows.

Voraussetzungen

Aktivieren von MCP

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

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

const pca = new msal.PublicClientApplication(msalConfig);

Verwenden Sie für NAA-Anwendungen dieselbe Konfiguration mit createNestablePublicClientApplication:

const pca = await msal.createNestablePublicClientApplication(msalConfig);

Ressourcenparameter

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"],
    resource: "https://example.microsoft.com",
};

Important

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

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

// Correct
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. Dieses Verhalten wirkt sich auf die stille Tokenbeschaffung 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.
// First request — acquires token from network
const token1 = await pca.acquireTokenSilent({
    scopes: ["User.Read"],
    resource: "https://resource-a.microsoft.com",
    account: account,
});

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

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

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(e) resource wurde sowohl in der Eigenschaft resource als auch in extraQueryParameters oder extraParameters gefunden. Verwenden Sie nur eine.

Beide Fehler werden als ClientAuthError ausgegeben. Weitere Informationen finden Sie in der Fehlerdokumentation.

Nächste Schritte