Share via


Toepassing met één pagina: een token verkrijgen om een API aan te roepen

Het patroon voor het verkrijgen van tokens voor API's met MSAL.js is om eerst een stille tokenaanvraag te proberen met behulp van de acquireTokenSilent methode. Wanneer deze methode wordt aangeroepen, controleert de bibliotheek eerst de cache in de browseropslag om te zien of er een niet-verlopen toegangstoken bestaat en retourneert deze. Als er geen toegangstoken is gevonden of het gevonden toegangstoken is verlopen, wordt geprobeerd het vernieuwingstoken te gebruiken om een nieuw toegangstoken op te halen. Als de levensduur van het vernieuwingstoken van 24 uur ook is verlopen, opent MSAL.js een verborgen iframe om op de achtergrond een nieuwe autorisatiecode aan te vragen met behulp van de bestaande actieve sessie met Microsoft Entra-id (indien van toepassing), die vervolgens wordt uitgewisseld voor een nieuwe set tokens (toegangs- en vernieuwingstokens). Zie Levensduur van token voor meer informatie over eenmalige aanmeldingssessie en levensduurwaarden voor tokens in Microsoft Entra ID. Zie voor meer informatie over MSAL.js cachezoekbeleid: Een toegangstoken verkrijgen.

De stille tokenaanvragen voor Microsoft Entra-id kunnen mislukken vanwege redenen als een wachtwoordwijziging of bijgewerkte beleidsregels voor voorwaardelijke toegang. Vaker worden fouten veroorzaakt door het verlopen van de levensduur van het vernieuwingstoken van 24 uur en de browser blokkeert cookies van derden, waardoor het gebruik van verborgen iframes wordt voorkomen om de gebruiker te blijven verifiëren. In deze gevallen moet u een van de interactieve methoden aanroepen (waardoor de gebruiker mogelijk wordt gevraagd) om tokens te verkrijgen:

Kiezen tussen een pop-up- of omleidingservaring

De keuze tussen een pop-up- of omleidingservaring is afhankelijk van uw toepassingsstroom:

  • Als u niet wilt dat gebruikers tijdens de verificatie van uw hoofdtoepassingspagina weggaan, raden we de pop-upmethode aan. Omdat de verificatieomleiding plaatsvindt in een pop-upvenster, blijft de status van de hoofdtoepassing behouden.

  • Als gebruikers browserbeperkingen of beleidsregels hebben waarbij pop-upvensters zijn uitgeschakeld, kunt u de omleidingsmethode gebruiken. Gebruik de omleidingsmethode met de browser Internet Explorer, omdat er bekende problemen zijn met pop-upvensters in Internet Explorer.

U kunt de API-bereiken instellen die u wilt opnemen in het toegangstoken wanneer de aanvraag voor het toegangstoken wordt gebouwd. Alle aangevraagde bereiken worden mogelijk niet verleend in het toegangstoken. Dat hangt af van de toestemming van de gebruiker.

Een token verkrijgen met een pop-upvenster

De volgende code combineert het eerder beschreven patroon met de methoden voor een pop-upervaring:

// MSAL.js v2 exposes several account APIs, logic to determine which account to use is the responsibility of the developer
const account = publicClientApplication.getAllAccounts()[0];

const accessTokenRequest = {
  scopes: ["user.read"],
  account: account,
};

publicClientApplication
  .acquireTokenSilent(accessTokenRequest)
  .then(function (accessTokenResponse) {
    // Acquire token silent success
    let accessToken = accessTokenResponse.accessToken;
    // Call your API with token
    callApi(accessToken);
  })
  .catch(function (error) {
    //Acquire token silent failure, and send an interactive request
    if (error instanceof InteractionRequiredAuthError) {
      publicClientApplication
        .acquireTokenPopup(accessTokenRequest)
        .then(function (accessTokenResponse) {
          // Acquire token interactive success
          let accessToken = accessTokenResponse.accessToken;
          // Call your API with token
          callApi(accessToken);
        })
        .catch(function (error) {
          // Acquire token interactive failure
          console.log(error);
        });
    }
    console.log(error);
  });

Een token verkrijgen met een omleiding

Het volgende patroon is zoals eerder beschreven, maar wordt weergegeven met een omleidingsmethode om tokens interactief te verkrijgen. U moet bellen en wachten handleRedirectPromise bij het laden van de pagina.

const redirectResponse = await publicClientApplication.handleRedirectPromise();
if (redirectResponse !== null) {
  // Acquire token silent success
  let accessToken = redirectResponse.accessToken;
  // Call your API with token
  callApi(accessToken);
} else {
  // MSAL.js v2 exposes several account APIs, logic to determine which account to use is the responsibility of the developer
  const account = publicClientApplication.getAllAccounts()[0];

  const accessTokenRequest = {
    scopes: ["user.read"],
    account: account,
  };

  publicClientApplication
    .acquireTokenSilent(accessTokenRequest)
    .then(function (accessTokenResponse) {
      // Acquire token silent success
      // Call API with token
      let accessToken = accessTokenResponse.accessToken;
      // Call your API with token
      callApi(accessToken);
    })
    .catch(function (error) {
      //Acquire token silent failure, and send an interactive request
      console.log(error);
      if (error instanceof InteractionRequiredAuthError) {
        publicClientApplication.acquireTokenRedirect(accessTokenRequest);
      }
    });
}

Volgende stappen

Ga verder met het volgende artikel in dit scenario: Een web-API aanroepen.