Kullanıcıların oturumunu kapatmak

Buradan başlamadan önce oturum açmayı, belirteç almayı ve belirteç ömrünü yönetmeyi anladığınızdan emin olun.

Oturumu kapatma

MSAL'de oturumu kapatma işlemi iki adımdan oluşur.

  1. MSAL önbelleğini temizleyin.
  2. Kimlik sunucusundaki oturumu temizleyin.

nesnesi, PublicClientApplication bu eylemleri gerçekleştiren iki API'yi kullanıma sunar.

msalInstance.logoutRedirect();
msalInstance.logoutPopup();

Bu API'ler tüm kullanıcı ve oturum verilerinin belirteç önbelleğini temizler, ardından tarayıcı penceresinde veya açılan pencerede sunucunun oturum kapatma sayfasına gider. Sunucu daha sonra kullanıcıdan oturumunun kapatılacağı hesabı seçmesini ister ve aşağıdaki koşullar sağlandığı sürece yeniden sizin postLogoutRedirectUri öğenize yönlendirir:

  1. URI, uygulama kaydında yanıt URL'si olarak kaydedilir
  2. URI, PublicClientApplication yapılandırmasında veya oturumu kapatma isteğinde postLogoutRedirectUri olarak belirtilir
  3. Kullanıcının kimlik sağlayıcısıyla etkin bir oturumu var
  4. (MSA Senaryoları) Uygulama kaydında bir ön kanal çıkış URL’si yapılandırılmıştır

Yukarıdaki koşullardan herhangi biri karşılanmazsa sayfa (veya açılan pencere) kimlik sağlayıcısının oturum kapatma sayfasında kalır.

ÖNEMLİ: Bu oturum kapatma gezintisi herhangi bir şekilde kesintiye uğrarsa, MSAL önbelleğiniz temizlenebilir, ancak oturum hala sunucuda kalıcı olabilir. Uygulamanıza dönmeden önce gezintinin tam olarak tamamlandığından emin olun.

const msalConfig = {
    auth: {
        clientId: 'your_client_id',
        authority: 'https://login.microsoftonline.con/{your_tenant_id}',
        redirectUri: 'https://contoso.com',
        postLogoutRedirectUri: 'https://contoso.com/homepage'
    }
};

İstek nesneleri

Davranışı özelleştirmek için oturum kapatma API'lerinin her birine yapılandırma seçenekleri sağlanabilir:

çıkış yönlendirmesi

logoutRedirect kullanılması, kullanıcı belirteçlerinin yerel önbelleğini temizler ve ardından pencereyi sunucudaki oturum kapatma sayfasına yönlendirir. tarafından logoutRedirect döndürülen sözlerin çözümlenmesi beklenmez, ancak yeniden yönlendirme başlatılmadan önce diğer kodun çalışmasını engellemeniz gerekiyorsa bunu bekleyebilirsiniz.

Davranışı özelleştirmek için yapılandırma seçenekleri sağlanabilir:

const currentAccount = msalInstance.getAccount({ homeAccountId });
await msalInstance.logoutRedirect({
    account: currentAccount,
    postLogoutRedirectUri: "https://contoso.com/loggedOut"
});

Sunucuda oturumu kapatma atlanıyor

Warning

Sunucu oturumu kapatmanın atlanması, kullanıcının oturumunun sunucuda etkin kalacağı ve kimlik bilgileri yeniden sağlanmadan uygulamanızda yeniden oturum açabileceği anlamına gelir.

Uygulamanızın yalnızca yerel oturumu kapatmasını istiyorsanız, istekteki onRedirectNavigate parametresine bir geri çağırma işlevi iletebilir ve bu geri çağırma işlevinin false döndürmesini sağlayabilirsiniz.

msalInstance.logoutRedirect({
    onRedirectNavigate: (url) => {
        // Return false if you would like to stop navigation after local logout
        return false;
    }
});

logoutPopup

logoutPopup API, sunucu oturumunu kapatma sayfasını bir açılır pencerede açarak uygulamanızın mevcut durumunu korumasına olanak tanır. Bu nedenden dolayı, oturumu kapatma için açılır pencereleri kullanmayı seçerken dikkat edilmesi gereken birkaç ek nokta logoutRedirect vardır:

  • logoutPopup tarafından döndürülen Promise'ın, açılır pencere kapandıktan sonra çözümlenmesi beklenir
  • postLogoutRedirectUrioturum kapatma tamamlandığında MSAL'nin açılan menüyi kapatabilmesi için gereklidir
  • postLogoutRedirectUri ana çerçevede değil, açılır pencerede açılacaktır. Oturum kapatma sonrasında en üst düzey uygulamanızın yeniden yönlendirilmesi gerekiyorsa, oturum kapatma isteğinde parametresini kullanabilirsiniz mainWindowRedirectUri .

Davranışı özelleştirmek için yapılandırma seçenekleri sağlanabilir.

const currentAccount = msalInstance.getAccount({ homeAccountId });
await msalInstance.logoutPopup({
    account: currentAccount,
    postLogoutRedirectUri: "https://contoso.com/loggedOut",
    mainWindowRedirectUri: "https://contoso.com/homePage",
    popupWindowAttributes: {
        popupSize: {
            height: 100,
            width: 100
        },
        popupPosition: {
            top: 100,
            left: 100
        }
    }
});

İstemsiz oturum kapatma

İstemci uygulamanızda Kimlik Belirteçleri için isteğe bağlı login_hint talebi etkinleştirildiyse, logoutRedirect veya logoutPopup kullanırken "sessiz" ya da istem olmadan oturumu kapatmak için Kimlik Belirteci'nin login_hint talebinden yararlanabilirsiniz. İstem olmadan çıkış yapmanın iki yolu vardır:

1. Seçenek: MSAL'nin hesabın kimlik belirteci taleplerinden login_hint otomatik olarak ayrıştırmasına izin ver

İlk ve en basit seçenek oturumu sonlandırmak istediğiniz hesap nesnesini oturum kapatma API'sine sağlamaktır. MSAL, hesabın kimlik belirtecinde login_hint talebinin kullanılabilir olup olmadığını kontrol eder ve hesap seçici istemini atlamak için bunu otomatik olarak oturumu sonlandırma isteğinin sonuna logout_hint olarak ekler.

const currentAccount = msalInstance.getAccount({ homeAccountId });
// The account's ID Token must contain the login_hint optional claim to avoid the account picker
await msalInstance.logoutRedirect({ account: currentAccount});

Seçenek 2: Oturum kapatma isteğinde logoutHint seçeneğini el ile ayarlama

Alternatif olarak, logoutHint öğesini manuel olarak ayarlamayı tercih ederseniz, uygulamanızda login_hint claim’ini çıkarabilir ve oturumu kapatma isteğinde bunu logoutHint olarak ayarlayabilirsiniz:

const currentAccount = msalInstance.getAccount({ homeAccountId });

// Extract login hint to use as logout hint
const logoutHint = currentAccount.idTokenClaims.login_hint;
await msalInstance.logoutPopup({ logoutHint: logoutHint });

Not: Seçtiğiniz API'ye (yeniden yönlendirme/açılır pencere) bağlı olarak, uygulama sunucu oturumunu sonlandırmak için yeniden yönlendirmeye veya açılır pencere açmaya devam eder. Aradaki fark, kullanıcının sunucunun hesap seçici istemini görmemesi veya bunlarla etkileşim kurması gerekmemesidir.

Ön kanal oturum kapatma

Microsoft Entra ID ve Azure AD B2C, kullanıcının çıkış işlemi başlatması durumunda tüm uygulamalarda tek oturum kapatmayı sağlayan OAuth ön kanal oturumu kapatma özelliğini destekler. MSAL.jsile bu özelliğin avantajlarından yararlanmak için aşağıdaki adımları gerçekleştirin:

  1. Uygulamanızda özel bir çıkış sayfası oluşturun. Bu sayfa, sayfa yüklemesinde belirteç alma gibi başka bir işlev gerçekleştirmemelidir (ayrıntılar için aşağıya bakın). Unutmayın, bu sayfa gizli bir iframe içinde yüklenecektir ve Microsoft Entra ID ile MSA kullanıcıları için iss ve sid sorgu parametrelerini içerecektir.
  2. Microsoft Entra yönetim merkezinde, uygulamanızın Kimlik Doğrulama sayfasına gidin ve ilk adımdaki sayfayı Front-channel logout URL altında kaydedin. Not: Bu sayfa https üzerinden yüklenmelidir.

Ön kanal oturum kapatma sayfası gereksinimleri

Ön kanal çıkışı için kullanılan sayfa aşağıdaki gibi oluşturulmalıdır:

  1. Sayfa yüklemesinde MSAL logoutRedirect API'sini otomatik olarak çağırın.
  2. PublicClientApplication yapılandırmasında, system.allowRedirectInIframe değerini true olarak ayarlayın.
  3. logout çağrılırken, iframe'de oturum kapatma sayfasına yönlendirmeyi engellemenizi öneririz (yukarıya bakın).

Example:

const msal = new PublicClientApplication({
    auth: {
        clientId: "my-client-id"
    },
    system: {
        allowRedirectInIframe: true
    }
})

// Automatically on page load
msal.logoutRedirect({
    onRedirectNavigate: () => {
        // Return false to stop navigation after local logout
        return false;
    }
});

Artık kullanıcı başka bir uygulamada oturumu kapattığında, uygulamanızın front-channel oturum kapatma URL’si gizli bir iframe içinde yüklenir ve MSAL.js, tekli oturum kapatmayı tamamlamak için önbelleğini temizler.

Note

Ön kanal çıkışı tüm tarayıcılarda her zaman desteklenmeyebilir. Chromium, Depolama Bölümlendirmesini etkinleştirdi ve Firefox, uygulamaların ön kanal oturumu kapatma işlemini gerçekleştirmesini sınırlayan benzer bir standardı destekliyor. Bu konudaki resmi Entra belgeleri için Üçüncü taraf tanımlama bilgileri olmadan ön kanal oturumu kapatmanın sınırlamaları konusuna bakın.

Front-channel oturum kapatma örnekleri

Aşağıdaki örnekler, MSAL.js kullanarak ön kanal oturum kapatmanın nasıl uygulanacağını gösterir:

Events

Uygulamanızın farklı bölümlerinin, logoutRedirect veya logoutPopup tarafından döndürülen promise nesnesine doğrudan erişmeden oturum kapatma durumuna tepki vermesi gerekiyorsa, event API'sini kullanabilirsiniz.

logoutPopup kullanılırken, oturum kapatma işlemi başarılı olduğunda veya başarısız olduğunda ve açılır pencere açıldığında olaylar tetiklenir.

Önemli Notlar

  • Oturumu kapatma API'sine hiçbir hesap geçirilmezse veya EndSessionRequest nesnesi yoksa, tüm hesaplarda oturum kapatılır.
  • Bir hesap logout API'sine iletilirse, MSAL yalnızca o hesapla ilişkili belirteçleri temizler.
  • Sunucu oturumu kapatma kullanışlı bir özelliktir ve bu nedenle en iyi çabayla yapılır. Oturum kapatma API'leri, sunucuda oturumun kapatılması başarılı olsun ya da olmasın, yerel uygulama önbelleği başarıyla temizlendiği sürece başarıyla sonuçlanır.

Sonraki Adımlar

Aşağıdakiler gibi daha gelişmiş konulara göz atın: