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.
Model Context Protocol (MCP) to otwarty standard, który umożliwia aplikacjom sztucznej inteligencji bezpieczne łączenie się z zewnętrznymi narzędziami, źródłami danych i usługami. MSAL Browser obsługuje przepływy MCP, wymuszając dołączanie parametru resource do wszystkich żądań tokenów oraz buforując tokeny dostępu według tego zasobu.
Note
Przepływy MCP są obsługiwane zarówno w przypadku standardowych aplikacji przeglądarkowych korzystających z PublicClientApplication, jak i aplikacji z uwierzytelnianiem aplikacji zagnieżdżonych (NAA, Nested App Authentication) korzystających z createNestablePublicClientApplication.
Aby zapoznać się z implementacjami po stronie serwera, zobacz Przepływy MCP węzła MSAL.
Wymagania wstępne
- Rejestrowanie aplikacji za pomocą platformy tożsamości firmy Microsoft
-
@azure/msal-browserWersja 5 lub nowsza zainstalowana w projekcie
Włączanie MCP
Ustaw isMcp: true w konfiguracji auth podczas tworzenia swojego PublicClientApplication:
const msalConfig = {
auth: {
clientId: "your-client-id",
authority: "https://login.microsoftonline.com/common",
isMcp: true,
},
};
const pca = new msal.PublicClientApplication(msalConfig);
W przypadku aplikacji NAA użyj tej samej konfiguracji z createNestablePublicClientApplication:
const pca = await msal.createNestablePublicClientApplication(msalConfig);
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"],
resource: "https://example.microsoft.com",
};
Ważna
resource Ustaw parametr bezpośrednio na obiekcie żądania. Nie przekazuj go za pośrednictwem extraQueryParameters ani extraParameters 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
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. To zachowanie ma wpływ na pozyskiwanie tokenów dyskretnych:
- Trafienie w pamięci podręcznej: jeśli w pamięci podręcznej istnieje token dostępu dla tych samych zakresów i zasobu, jest on z niej zwracany.
- 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.
// 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,
});
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 |
Znaleziono element resource zarówno we właściwości resource, jak i w extraQueryParameters lub extraParameters. Użyj tylko jednego. |
Oba błędy są zgłaszane jako ClientAuthError. Aby uzyskać więcej informacji, zobacz dokumentację błędów.