Použití toků MCP s prohlížečem MSAL

Model Context Protocol (MCP) je otevřený standard, který umožňuje zabezpečené připojení aplikací AI s externími nástroji, zdroji dat a službami. MSAL Browser podporuje toky MCP tím, že vyžaduje, aby všechny požadavky na tokeny obsahovaly parametr resource a ukládá přístupové tokeny do mezipaměti s klíčem podle daného prostředku.

Note

Toky MCP jsou podporovány pro standardní aplikace prohlížeče používající PublicClientApplication a vnořené aplikace ověřování aplikací (NAA) pomocí createNestablePublicClientApplication.

Informace o implementacích na straně serveru najdete v tématu Toky MSAL Node MCP.

Předpoklady

Povolení MCP

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

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

const pca = new msal.PublicClientApplication(msalConfig);

Pro aplikace NAA použijte stejnou konfiguraci s createNestablePublicClientApplication:

const pca = await msal.createNestablePublicClientApplication(msalConfig);

Parametr prostředku

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

Important

resource Nastavte parametr přímo na objekt požadavku. Nepředávejte ho prostřednictvím extraQueryParameters ani extraParameters současně s vlastností resource — tím vyvoláte chybu misplaced_resource_parameter.

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

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

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. Toto chování má vliv na získání tichého tokenu:

  • Zásah mezipaměti: Pokud existuje přístupový token uložený v mezipaměti pro stejné rozsahy oprávnění a prostředek, je vrácen 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.
// 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,
});

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 nebo extraParameters. Použijte jenom jednu.

Obě chyby jsou vyvolány jako ClientAuthError. Další informace najdete v dokumentaci k chybám.

Další kroky