Notatka
Dostęp do tej strony wymaga autoryzacji. Może spróbować zalogować się lub zmienić katalogi.
Dostęp do tej strony wymaga autoryzacji. Możesz spróbować zmienić katalogi.
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
- Rejestrowanie aplikacji za pomocą platformy tożsamości firmy Microsoft
- Aplikacja skonfigurowana jako klient publiczny (na przykład aplikacja klasyczna lub aplikacja wiersza polecenia)
-
@azure/msal-nodeWersja 5 lub nowsza zainstalowana w projekcie
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
- Przykład przepływów MCP — aplikacja Express demonstruje mcp z kodem autoryzacji i przepływami dyskretnymi.