Share via


Tek sayfalı uygulama: oturum açma ve oturumu kapatma

Uygulamanızdaki API'lere erişmek için belirteçleri alabilmeniz için önce kimliği doğrulanmış bir kullanıcı bağlamı gerekir. Kullanıcının kimliğini doğrulamak için Açılır pencere ve/veya Yeniden yönlendirme oturum açma yöntemi kullanabilirsiniz.

Uygulamanızın kimliği doğrulanmış bir kullanıcı bağlamı veya kimlik belirtecine erişimi varsa oturum açma adımını atlayabilir ve belirteçleri doğrudan alabilirsiniz. Ayrıntılar için bkz . Kullanıcı ipucuyla çoklu oturum açma (SSO).

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

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

  • Kullanıcıların kimlik doğrulaması sırasında ana uygulama sayfanızdan uzaklaşmasını istemiyorsanız bir açılır pencere kullanın. 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 kullanın. Örneğin, Internet Explorer'da açılır pencerelerle ilgili bilinen sorunlar vardır.

Açılır pencereyle oturum açma

const config = {
  auth: {
    clientId: "your_app_id",
    redirectUri: "your_app_redirect_uri", //defaults to application start page
    postLogoutRedirectUri: "your_app_logout_redirect_uri",
  },
};

const loginRequest = {
  scopes: ["User.ReadWrite"],
};

let accountId = "";

const myMsal = new PublicClientApplication(config);

myMsal
  .loginPopup(loginRequest)
  .then(function (loginResponse) {
    accountId = loginResponse.account.homeAccountId;
    // Display signed-in user content, call API, etc.
  })
  .catch(function (error) {
    //login failure
    console.log(error);
  });

Yeniden yönlendirme ile oturum açma

const config = {
  auth: {
    clientId: "your_app_id",
    redirectUri: "your_app_redirect_uri", //defaults to application start page
    postLogoutRedirectUri: "your_app_logout_redirect_uri",
  },
};

const loginRequest = {
  scopes: ["User.ReadWrite"],
};

let accountId = "";

const myMsal = new PublicClientApplication(config);

function handleResponse(response) {
  if (response !== null) {
    accountId = response.account.homeAccountId;
    // Display signed-in user content, call API, etc.
  } else {
    // In case multiple accounts exist, you can select
    const currentAccounts = myMsal.getAllAccounts();

    if (currentAccounts.length === 0) {
      // no accounts signed-in, attempt to sign a user in
      myMsal.loginRedirect(loginRequest);
    } else if (currentAccounts.length > 1) {
      // Add choose account code here
    } else if (currentAccounts.length === 1) {
      accountId = currentAccounts[0].homeAccountId;
    }
  }
}

myMsal.handleRedirectPromise().then(handleResponse);

Tarayıcılarda oturumu kapatma davranışı

Bir veya daha fazla uygulamada güvenli oturum kapatma sağlamak için aşağıdaki yöntemler önerilir:

  • Paylaşılan cihazlarda, kullanıcılar cihazdan uzaklaşmadan önce tarayıcının özel/gizli modunu kullanmalı ve tüm tarayıcı pencerelerini kapatmalıdır.

  • Paylaşılmayan cihazlarda kullanıcılar, cihazdaki tüm işletim sistemi oturumlarını kilitlemek veya oturumu kapatmak için bir işletim sistemi kilit ekranı kullanmalıdır. Microsoft, kullanıcılara bu en iyi gizlilik ve güvenlik uygulamalarını anımsatmak için oturum kapatma sayfasını kullanır.

Daha fazla bilgi için bkz. Microsoft'un internet gizliliği en iyi yöntemleri.

Bir kullanıcı önerileri kullanarak oturumu kapatmamayı seçerse, oturumu kapatma işlevini etkinleştirmek için aşağıdaki diğer yöntemler şunlardır:

  • Federasyon oturumu kapatmak için Microsoft'un OpenID Bağlan Ön Kanal Oturumu Kapatma. Bir uygulama yeni bir uygulamayla oturum açma durumunu paylaştığında ancak kendi oturum belirteçlerini/tanımlama bilgilerini yönettiğinde bu seçeneği kullanabilirsiniz. Bu uygulamada, örneğin tarayıcılar üçüncü taraf tanımlama bilgilerini engellediğinde içeriğin engellendiği bazı sınırlamalar vardır.

  • Açılır pencere ve/veya Yerel uygulama için yeniden yönlendirme oturumu kapatın. Açılır pencere ve yeniden yönlendirme yöntemleri, uç noktada ve yerel uygulama için kullanıcının oturumunu sonlar. Ancak, ön kanal iletişimi engellenirse bu yöntemler diğer federasyon uygulamaları için oturumu hemen temizlemeyebilir.

Açılır pencereyle oturumu kapatma

v2 ve üzeri MSAL.js, tarayıcı depolama alanında önbelleği temizleyen ve Microsoft Entra oturumu kapatma sayfasına açılan bir pencere açan bir yöntem sağlar logoutPopup . Oturumu kapattıktan sonra yeniden yönlendirme varsayılan olarak oturum açma başlangıç sayfasına yönlendirilir ve açılır pencere kapatılır.

Oturumu kapatıldıktan sonra deneyimi için, kullanıcı belirli bir URI'ye yeniden yönlendirilecek şekilde ayarlayabilirsiniz postLogoutRedirectUri . Bu URI, uygulama kaydınızda yeniden yönlendirme URI'si olarak kaydedilmelidir. Ana pencereyi, isteğin bir parçası olarak geçirerek mainWindowRedirectUri giriş sayfası veya oturum açma sayfası gibi farklı bir sayfaya yeniden yönlendirmek için de yapılandırabilirsinizlogoutPopup.

const config = {
  auth: {
    clientId: "your_app_id",
    redirectUri: "your_app_redirect_uri", // defaults to application start page
    postLogoutRedirectUri: "your_app_logout_redirect_uri",
  },
};

const myMsal = new PublicClientApplication(config);

// you can select which account application should sign out
const logoutRequest = {
  account: myMsal.getAccountByHomeId(homeAccountId),
  mainWindowRedirectUri: "your_app_main_window_redirect_uri",
};

await myMsal.logoutPopup(logoutRequest);

Yeniden yönlendirme ile oturumu kapatma

MSAL.js, v1'de bir logout yöntem ve v2'de tarayıcı depolamasında önbelleği temizleyen ve Microsoft Entra oturumu kapatma sayfasına yönlendiren bir logoutRedirect yöntem sağlar. Oturumu kapatıldıktan sonra yeniden yönlendirme varsayılan olarak oturum açma başlangıç sayfasına yönlendirilir.

Oturumu kapatıldıktan sonra deneyimi için, kullanıcı belirli bir URI'ye yeniden yönlendirilecek şekilde ayarlayabilirsiniz postLogoutRedirectUri . Bu URI, uygulama kaydınızda yeniden yönlendirme URI'si olarak kaydedilmelidir.

Microsoft'un özel tarayıcı ve kilit ekranı kullanımıyla ilgili en iyi İnternet gizliliği uygulamalarını hatırlatması bu yöntemde gösterilmediğinden, en iyi yöntemleri açıklamak ve kullanıcılara tüm tarayıcı pencerelerini kapatmalarını anımsatmak isteyebilirsiniz.

const config = {
  auth: {
    clientId: "your_app_id",
    redirectUri: "your_app_redirect_uri", //defaults to application start page
    postLogoutRedirectUri: "your_app_logout_redirect_uri",
  },
};

const myMsal = new PublicClientApplication(config);

// you can select which account application should sign out
const logoutRequest = {
  account: myMsal.getAccountByHomeId(homeAccountId),
};

myMsal.logoutRedirect(logoutRequest);

Sonraki adımlar

Bu senaryoda uygulama için belirteç alma başlıklı sonraki makaleye geçin.