MSAL Düğümü ile MCP akışlarını kullanma

Model Bağlam Protokolü (MCP) uygulamaları oluştururken, MSAL Node’u kaynak kapsamlı belirteç edinimini ve önbelleğe almayı zorunlu kılacak şekilde yapılandırabilirsiniz. MCP modu etkinleştirildiğinde, MSAL her belirteç isteğinin bir resource parametre içermesini gerektirir ve bu kaynak tarafından anahtarlanan erişim belirteçlerini önbelleğe alır.

Note

MCP akışları yalnızca genel istemci uygulamalarında kullanılabilir.

Prerequisites

MCP modunu etkinleştirme

PublicClientApplication oluştururken, auth yapılandırmasında isMcp: true ayarlayın:

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

const pca = new msal.PublicClientApplication(config);

Kaynak parametresini dahil et

isMcp true olduğunda, her token isteği must bir resource parametresini içermelidir. Bunu atlamak resource_parameter_required hatasına neden olur.

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

const response = await pca.acquireTokenByCode(tokenRequest);

Important

Parametreyi resource doğrudan istek nesnesi üzerinde ayarlayın. Bunu, resource özelliğiyle aynı anda extraQueryParameters aracılığıyla geçirmeyin — bunu yapmak misplaced_resource_parameter hatasına neden olur.

Aşağıdaki örnekte, parametresini ayarlamanın doğru ve yanlış yolları gösterilmektedir 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" },
};

Kaynak düzeyinde önbellekleme

Etkinleştirildiğinde isMcp , erişim belirteçleri ilişkili kaynaklarıyla önbelleğe alınır. Bu durum, sessiz belirteç edinimini etkiler:

  • Önbellek isabeti: Aynı kapsamlar ve kaynak için önbelleğe alınmış bir erişim belirteci varsa, önbellekten döndürülür.
  • Önbellek hatası: İstenen kaynak önbelleğe alınmış hiçbir belirteçle eşleşmiyorsa MSAL, istenen kaynak için yeni bir belirteç almak üzere ağa başvurur.
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],
});

Hata yönetimi

MCP akışlarına özgü iki hata vardır:

Hata kodu Description
resource_parameter_required isMcp, true ancak istek bir resource parametresi içermiyor.
misplaced_resource_parameter resource, hem resource özelliğinde hem de extraQueryParameters içinde bulundu. Yalnızca bir tane kullanın.

Her iki hata da ClientAuthError olarak fırlatılır. Daha fazla bilgi için MSAL Node SSS'ye bakın.

Samples

Sonraki Adımlar