Testing

The loadExternalTokens() API

В MSAL Browser, начиная с версии 2.17.0, добавлен API loadExternalTokens(), который позволяет загружать в кэш MSAL токены идентификации, доступа и обновления, после чего их можно получить с помощью acquireTokenSilent().

Примечание. Это расширенная функция, предназначенная только для тестирования в среде браузера. Загрузка токенов в кэш вашего приложения может нарушить работу приложения. Кроме того, мы рекомендуем использовать API loadExternalTokens() с модульными и интеграционными тестами. Для E2E-тестирования вместо этого обратитесь к нашему TestingSample.

loadExternalTokens() API — это общедоступный API, который позволяет приложениям загружать пользовательские токены в кэш MSAL.

await loadExternalTokens(
    config,
    silentRequest,
    serverResponse,
    loadTokenOptions,
);

loadExternalTokens() принимает запрос типа SilentRequest, ответ типа ExternalTokenResponseи параметры типа LoadTokenOptions.

См. определения типов для каждого из них, которые можно импортировать из @azure/msal-browser:

Загрузка токенов

Вы можете предоставить любую комбинацию ID-токена, токена доступа и токена обновления для кэширования, однако как минимум для API loadExternalTokens требуется один из следующих наборов входных параметров, чтобы определить связи между токенами и выполнить корректное кэширование:

  • Объект SilentRequest со сведениями о учетной записи или
  • Объект SilentRequest с полномочиями И объект LoadTokenOptions с clientInfo, ИЛИ
  • SilentRequest Объект с полномочиями И объект ответа сервера с client_info
  • SilentRequest объект с полномочиями И объект ответа сервера с id_token

В приведённых ниже примерах показана загрузка токенов по отдельности, однако в одном запросе можно передать любой из них, любые 2 или все 3.

Загрузка ID-токенов

Помимо параметров, перечисленных выше, укажите следующие параметры, чтобы загрузить токен идентификации:

  1. Ответ сервера с полем id_token

Учетная запись также будет задана в кэше на основе приведенных выше сведений.

См. приведенные ниже примеры кода:

const config: Configuration = {
    auth: { clientId: "your-client-id" },
};

const silentRequest: SilentRequest = {
    account: {
        homeAccountId: "your-home-account-id",
        environment: "login.microsoftonline.com",
        tenantId: "your-tenant-id",
        username: "test@contoso.com",
        localAccountId: "your-local-account-id",
    },
};

const serverResponse: ExternalTokenResponse = {
    id_token: "id-token-here",
};

const loadTokenOptions: LoadTokenOptions = {};

const pca = new PublicClientApplication(config);
await loadExternalTokens(
    config,
    silentRequest,
    serverResponse,
    loadTokenOptions
);

// OR

const config: Configuration = {
    auth: { clientId: "your-client-id" },
};

const silentRequest: SilentRequest = {
    scopes: [],
    authority: "https://login.microsoftonline.com/your-tenant-id",
};

const serverResponse: ExternalTokenResponse = {
    id_token: "id-token-here",
};

const loadTokenOptions: LoadTokenOptions = {
    clientInfo: "client-info-here",
};

const pca = new PublicClientApplication(config);
await loadExternalTokens(
    config,
    silentRequest,
    serverResponse,
    loadTokenOptions
);

// OR

const config: Configuration = {
    auth: { clientId: "your-client-id" },
};

const silentRequest: SilentRequest = {
    scopes: [],
    authority: "https://login.microsoftonline.com/your-tenant-id",
};

const serverResponse: ExternalTokenResponse = {
    id_token: "id-token-here",
    client_info: "client-info-here",
};

const loadTokenOptions: LoadTokenOptions = {};

const pca = new PublicClientApplication(config);
await loadExternalTokens(
    config,
    silentRequest,
    serverResponse,
    loadTokenOptions
);

Загрузка токенов доступа

Помимо параметров, перечисленных выше , предоставьте следующие возможности для загрузки маркера доступа:

  1. Ответ сервера с параметром access_token, expires_intoken_typeиscope

См. приведенные ниже примеры кода:

const config: Configuration = {
    auth: { clientId: "your-client-id" },
};

const silentRequest: SilentRequest = {
    scopes: ["User.Read", "email"],
    account: {
        homeAccountId: "your-home-account-id",
        environment: "login.microsoftonline.com",
        tenantId: "your-tenant-id",
        username: "test@contoso.com",
        localAccountId: "your-local-account-id",
    },
};

const serverResponse: ExternalTokenResponse = {
    token_type: AuthenticationScheme.BEARER, // "Bearer"
    scope: "User.Read email",
    expires_in: 3599,
    access_token: "access-token-here",
};

const loadTokenOptions: LoadTokenOptions = {
    extendedExpiresOn: 6599,
};

const pca = new PublicClientApplication(config);
await loadExternalTokens(
    config,
    silentRequest,
    serverResponse,
    loadTokenOptions
);

Загрузка токенов обновления

Помимо параметров, перечисленных выше , укажите следующее для загрузки маркера обновления:

  1. Ответ сервера с refresh_token и необязательно с refresh_token_expires_in

См. приведенные ниже примеры кода:

const config: Configuration = {
    auth: { clientId: "your-client-id" },
};

const silentRequest: SilentRequest = {
    scopes: [],
    account: {
        homeAccountId: "your-home-account-id",
        environment: "login.microsoftonline.com",
        tenantId: "your-tenant-id",
        username: "test@contoso.com",
        localAccountId: "your-local-account-id",
    },
};

const serverResponse: ExternalTokenResponse = {
    refresh_token: "refresh-token-here",
    refresh_token_expires_in: "86399",
};

const loadTokenOptions: LoadTokenOptions = {};

const pca = new PublicClientApplication(config);

await loadExternalTokens(
    config,
    silentRequest,
    serverResponse,
    loadTokenOptions
);