Testing

La API loadExternalTokens()

MSAL Browser, a partir de la versión 2.17.0, ha añadido la API loadExternalTokens(), que permite cargar tokens de identificador, de acceso y de actualización en la caché de MSAL, que luego pueden recuperarse mediante acquireTokenSilent().

Nota: Se trata de una característica avanzada que está pensada solo para realizar pruebas en el entorno del explorador. Cargar tokens en la memoria caché de la aplicación puede provocar que la aplicación se interrumpa. Además, se recomienda loadExternalTokens() usar la API con pruebas unitarias e de integración. Para las pruebas de E2E, consulta nuestra TestingSample en su lugar.

La loadExternalTokens() API es una API pública que facilita las aplicaciones para cargar tokens personalizados en la memoria caché de MSAL.

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

loadExternalTokens() toma una solicitud de tipo SilentRequest, una respuesta de tipo ExternalTokenResponsey opciones de tipo LoadTokenOptions.

Consulte las definiciones de tipo para cada una de ellas, que se pueden importar desde @azure/msal-browser:

Carga de tokens

Puede proporcionar cualquier combinación de tokens de identificador, acceso y actualización para el almacenamiento en caché, pero, como mínimo, la loadExternalTokens API requiere uno de los siguientes conjuntos de parámetros de entrada para identificar las asociaciones de token y almacenar en caché adecuadamente:

  • Objeto SilentRequest con información de cuenta, OR
  • Un objeto SilentRequest con la autoridad Y un objeto LoadTokenOptions con clientInfo, O
  • Un objeto SilentRequest con autoridad Y un objeto de respuesta del servidor con client_info
  • Un objeto SilentRequest con autoridad Y un objeto de respuesta del servidor con id_token

Los ejemplos siguientes muestran la carga individual de los tokens; sin embargo, puede proporcionar 1, 2 o los 3 en una sola solicitud.

Carga de tokens de identificador

Además de los parámetros enumerados anteriormente , proporcione lo siguiente para cargar un token de identificador:

  1. Una respuesta del servidor con el id_token campo

También se establecerá una cuenta en la memoria caché en función de la información proporcionada anteriormente.

Consulte los ejemplos de código siguientes:

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
);

Carga de tokens de acceso

Además de los parámetros enumerados anteriormente , proporcione lo siguiente para cargar un token de acceso:

  1. Una respuesta del servidor con un access_token, expires_in, token_typey scope

Consulte los ejemplos de código siguientes:

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
);

Cargando tokens de actualización

Además de los parámetros enumerados anteriormente , proporcione lo siguiente para cargar un token de actualización:

  1. Una respuesta del servidor con un refresh_token y, opcionalmente, refresh_token_expires_in

Consulte los ejemplos de código siguientes:

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
);