Używaj przepływów MCP z MSAL Node

Podczas tworzenia aplikacji Model Context Protocol (MCP) można skonfigurować MSAL Node tak, aby wymuszał uzyskiwanie i buforowanie tokenów ograniczonych do zakresu zasobu. Gdy tryb MCP jest włączony, biblioteka MSAL wymaga każdego żądania tokenu, aby uwzględnić resource parametr i buforuje tokeny dostępu kluczowane przez ten zasób.

Note

Przepływy MCP są dostępne tylko dla publicznych aplikacji klienckich.

Wymagania wstępne

Włączanie trybu MCP

Ustaw isMcp: true w konfiguracji auth podczas tworzenia swojego PublicClientApplication:

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

const pca = new msal.PublicClientApplication(config);

Dołącz parametr zasobu

Gdy isMcp ma wartość true, każde żądanie uzyskania tokenu musi zawierać parametr resource. Pominięcie tego powoduje błąd resource_parameter_required.

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

const response = await pca.acquireTokenByCode(tokenRequest);

Ważna

resource Ustaw parametr bezpośrednio na obiekcie żądania. Nie przekazuj go za pośrednictwem extraQueryParameters jednocześnie z właściwością resource — spowoduje to wystąpienie błędu misplaced_resource_parameter.

W poniższym przykładzie przedstawiono poprawne i nieprawidłowe sposoby ustawiania 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" },
};

Buforowanie w zakresie zasobów

Po isMcp włączeniu tokeny dostępu są buforowane z skojarzonym zasobem. Ma to wpływ na pozyskiwanie tokenów dyskretnych:

  • Odnalezienie w pamięci podręcznej: Jeśli istnieje token dostępu zapisany w pamięci podręcznej dla tych samych zakresów i zasobu, jest zwracany z pamięci podręcznej.
  • Brak pamięci podręcznej: jeśli żądany zasób nie jest zgodny z żadnym tokenem buforowanym, biblioteka MSAL wraca do sieci, aby uzyskać nowy token dla żądanego zasobu.
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],
});

Obsługa błędów

Dwa błędy są specyficzne dla przepływów MCP:

Kod błędu Description
resource_parameter_required isMcp ma wartość true, ale żądanie nie zawiera parametru resource.
misplaced_resource_parameter Obiekt resource został znaleziony zarówno we właściwości resource, jak i w extraQueryParameters. Użyj tylko jednego.

Oba błędy są zgłaszane jako ClientAuthError. Aby uzyskać więcej informacji, zobacz często zadawane pytania dotyczące biblioteki MSAL Node.

Przykłady

Następne kroki