Testing

The loadExternalTokens() API

MSAL Browser a partire dalla versione 2.17.0 ha aggiunto l'API loadExternalTokens() , che consente il caricamento di ID, l'accesso e l'aggiornamento dei token nella cache MSAL, che può quindi essere recuperato usando acquireTokenSilent().

Nota: si tratta di una funzionalità avanzata destinata solo ai test nell'ambiente del browser. Il caricamento dei token nella cache dell'applicazione può causare l'interruzione dell'app. Inoltre, consigliamo di utilizzare loadExternalTokens() API con test unitari e di integrazione. Per i test E2E, fai invece riferimento a TestingSample.

L'API loadExternalTokens() è un'API pubblica che consente alle app di caricare token personalizzati nella cache di MSAL.

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

loadExternalTokens() accetta una richiesta di tipo SilentRequest, una risposta di tipo ExternalTokenResponse e delle opzioni di tipo LoadTokenOptions.

Vedere le definizioni dei tipi per ognuna, che è possibile importare da @azure/msal-browser:

Caricamento di token

È possibile fornire qualsiasi combinazione di ID, token di accesso e aggiornamento per la memorizzazione nella cache, ma almeno l'API loadExternalTokens richiede uno dei set di parametri di input seguenti per identificare le associazioni di token e la cache in modo appropriato:

  • Un oggetto SilentRequest con informazioni sull'account, oppure
  • Un oggetto SilentRequest con l'autorità E un oggetto LoadTokenOptions con clientInfo, OPPURE
  • Un oggetto SilentRequest con l'autorità AND un oggetto di risposta del server con client_info
  • Un oggetto SilentRequest con l'autorità E un oggetto di risposta del server con id_token

Gli esempi seguenti mostrano il caricamento dei token singolarmente, tuttavia, è possibile specificare qualsiasi 1, 2 o tutti i 3 in una singola richiesta.

Caricamento dei token ID

Oltre ai parametri elencati in precedenza , fornire quanto segue per caricare un token ID:

  1. Risposta del server con il id_token campo

Un account verrà impostato anche nella cache in base alle informazioni fornite in precedenza.

Vedere gli esempi di codice seguenti:

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

Caricamento di token di accesso

Oltre ai parametri elencati in precedenza , fornire quanto segue per caricare un token di accesso:

  1. Una risposta del server con un access_token, un expires_in, un token_type e un scope

Vedere gli esempi di codice seguenti:

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

Caricamento dei token di aggiornamento

Oltre ai parametri elencati in precedenza , fornire quanto segue per caricare un token di aggiornamento:

  1. Una risposta del server con un refresh_token e opzionalmente refresh_token_expires_in

Vedere gli esempi di codice seguenti:

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