Použití toků MCP pomocí MSAL Node

Při vytváření aplikací Model Context Protocol (MCP) můžete nakonfigurovat MSAL Node tak, aby vynucoval získávání tokenů s rozsahem omezeným na prostředek a jejich ukládání do mezipaměti. Pokud je povolen režim MCP, vyžaduje MSAL každý požadavek na token, aby zahrnoval resource parametr a ukládá do mezipaměti přístupové tokeny klíčované tímto prostředkem.

Note

Toky MCP jsou dostupné jenom pro veřejné klientské aplikace.

Předpoklady

Povolení režimu MCP

Nastavte isMcp: true v konfiguraci auth při vytváření PublicClientApplication:

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

const pca = new msal.PublicClientApplication(config);

Zahrňte parametr resource

Pokud je isMcptrue, každý požadavek na token musí obsahovat parametr resource. Vynechání vyvolá resource_parameter_required chybu.

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

const response = await pca.acquireTokenByCode(tokenRequest);

Important

resource Nastavte parametr přímo na objekt požadavku. Nepředávejte ji přes extraQueryParameters současně s vlastností resource – jinak dojde k chybě misplaced_resource_parameter.

Následující příklad ukazuje správné a nesprávné způsoby nastavení parametru resource :

// 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" },
};

Ukládání do mezipaměti s oborem prostředků

Pokud je isMcp povoleno, přístupové tokeny jsou ukládány do mezipaměti společně s příslušným prostředkem. To má vliv na tiché získání tokenu:

  • Přístup do mezipaměti: Pokud existuje přístupový token uložený v mezipaměti pro stejné obory a prostředek, vrátí se z mezipaměti.
  • Nenalezeno v mezipaměti: Pokud požadovaný prostředek neodpovídá žádnému tokenu uloženému v mezipaměti, MSAL přejde k síti, aby získala nový token pro požadovaný prostředek.
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],
});

Zpracování chyb

Dvě chyby jsou specifické pro toky MCP:

Kód chyby Description
resource_parameter_required isMcp je true , ale požadavek neobsahuje resource parametr.
misplaced_resource_parameter resource byl nalezen jak ve vlastnosti resource, tak v extraQueryParameters. Použijte jenom jednu.

Obě chyby jsou vyvolány jako ClientAuthError. Další informace najdete v nejčastějších dotazech k uzlu MSAL.

Ukázky

  • Ukázka toků MCP – Expresní aplikace demonstrující MCP s autorizačním kódem a tichými toky

Další kroky