Aracılığıyla paylaş


Tek sayfalı uygulama: API çağırmak için belirteç alma

MSAL.js ile API'ler için belirteç alma düzeni, önce yöntemini kullanarak sessiz belirteç isteğinde bulunmaktıracquireTokenSilent. Bu yöntem çağrıldığında kitaplık, süresi dolmamış bir erişim belirtecinin mevcut olup olmadığını görmek için önce tarayıcı depolama alanında önbelleği denetler ve döndürür. Erişim belirteci bulunmazsa veya bulunan erişim belirtecinin süresi dolduysa, yeni bir erişim belirteci almak için yenileme belirtecini kullanmayı dener. Yenileme belirtecinin 24 saatlik ömrü de dolduysa, MSAL.js Microsoft Entra Id (varsa) ile mevcut etkin oturumu kullanarak sessizce yeni bir yetkilendirme kodu istemek için gizli bir iframe açar ve bu da yeni bir belirteç kümesi (erişim ve yenileme belirteçleri) ile değiştirilir. Microsoft Entra Id'de çoklu oturum açma (SSO) oturumu ve belirteç ömrü değerleri hakkında daha fazla bilgi için bkz . Belirteç ömrü. MSAL.js önbellek arama ilkesi hakkında daha fazla bilgi için bkz. Erişim Belirteci Alma.

Parola değişikliği veya güncelleştirilmiş Koşullu Erişim ilkeleri gibi nedenlerle Microsoft Entra Id'ye yönelik sessiz belirteç istekleri başarısız olabilir. Daha sık hatalar yenileme belirtecinin 24 saatlik ömrünün dolmasından ve tarayıcının üçüncü taraf tanımlama bilgilerini engellemesi nedeniyle gerçekleşir ve bu da kullanıcının kimliğini doğrulamaya devam etmek için gizli iframe'lerin kullanılmasını engeller. Bu durumlarda, belirteçleri almak için etkileşimli yöntemlerden birini (kullanıcıdan isteyebilir) çağırmanız gerekir:

Açılır pencere veya yeniden yönlendirme deneyimi arasında seçim yapma

Açılır pencere veya yeniden yönlendirme deneyimi arasındaki seçim, uygulama akışınıza bağlıdır:

  • Kimlik doğrulaması sırasında kullanıcıların ana uygulama sayfanızdan uzaklaşmasını istemiyorsanız, açılır yöntemi öneririz. Kimlik doğrulama yeniden yönlendirmesi bir açılır pencerede gerçekleştiğinden, ana uygulamanın durumu korunur.

  • Kullanıcıların açılır pencerelerin devre dışı bırakıldığı tarayıcı kısıtlamaları veya ilkeleri varsa yeniden yönlendirme yöntemini kullanabilirsiniz. Internet Explorer'da açılır pencerelerle ilgili bilinen sorunlar olduğundan , Internet Explorer tarayıcısıyla yeniden yönlendirme yöntemini kullanın.

Erişim belirtecinin erişim belirteci isteğini oluştururken eklenmesini istediğiniz API kapsamlarını ayarlayabilirsiniz. Erişim belirtecinde istenen tüm kapsamlar verilemiyor olabilir. Bu, kullanıcının onayına bağlıdır.

Açılır pencereli belirteç alma

Aşağıdaki kod, daha önce açıklanan deseni açılır bir deneyim için yöntemlerle birleştirir:

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

Yeniden yönlendirme ile belirteç alma

Aşağıdaki desen daha önce açıklandığı gibi ancak belirteçleri etkileşimli olarak almak için bir yeniden yönlendirme yöntemiyle gösterilmiştir. Sayfa yüklemesinde aramanız ve beklemeniz handleRedirectPromise gerekir.

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

Sonraki adımlar

Bu senaryoda web API'sini çağırma adlı sonraki makaleye geçin.