IdentityServer4 Yazı Serisi #18 – Merkezi Üyelik Sistemi – Sign Out
Merhaba,
IdentityServer4 Yazı Serisinin bu onsekizinci makalesinde çıkış işlemini ele alacağız. Esasında tarayıcı üzerindeki cookie bilgilerinin temizlenmesinden ibaret olan bu işlem, mevzu bahis IdentityServer4 mimarisi olunca ekstra bir kaç konfigürasyon gerektirmektedir. Şimdi gelin ilgili konuyu pratik olarak ele alalım…
İlk olarak oturumu kapatmak için client’ı signout-callback-oidc
adresine yönlendirmemiz gerekmektedir. Bunun için Auth Server’da ki ‘Config.cs’ dosyasındaki client tanımlamasında ‘PostLogoutRedirectUris’ property’sinde aşağıdaki gibi çalışmamız yeterlidir.
public static IEnumerable<Client> GetClients() { return new List<Client> { . . . new Client { . . . RedirectUris = { "https://localhost:4000/signin-oidc" }, . . . PostLogoutRedirectUris = { "https://localhost:4000/signout-callback-oidc" } } }; }
Hatırlarsanız eğer, nasıl ki ilgili client giriş yaptığında OpenIdConnect 13. satırda olduğu gibi signin-oidc
adresine yönlendiriyorsa, çıkış yaptığında da otomatik signout-callback-oidc
adresine yönlendirmektedir.
Bu işlemin ardından ilgili client uygulamasında çıkış yapacak olan controller/action içerisinde aşağıdaki çalışmanın yapılması gerekmektedir.
public class AuthController : Controller { public async Task Logout() { await HttpContext.SignOutAsync("OnlineBankamatikCookie"); await HttpContext.SignOutAsync("oidc"); } }
Yukarıdaki kod bloğunu incelerseniz eğer; 5. satırdaki ‘SignOutAsync’ fonksiyonu ‘OnlineBankamatikCookie’ şema değerine sahip olan client’tan çıkış yapar. 6. satırdaki ‘SignOutAsync’ fonksiyonu ise OpenId’den çıkış yapar.
Yukarıdaki ekran görüntüsünü incelerseniz eğer çıkış yapıldıktan sonra kullanıcı Auth Server’a yönlendirilmekte ve geri dönülebilmesi için Click here to return to the OnlineBankamatik application metinindeki ‘here’ kelimesine tıklanması gerekmektedir. Eğer ki bu yönlendirmenin manuel değilde, otomatik yapılmasını istiyorsanız; ‘AuthServer’ -> ‘Quickstart’ -> ‘Account’ -> ‘AccountOptions.cs’ kombinasyonundaki ‘AutomaticRedirectAfterSignOut’ property’sine ‘true’ değerinin verilmesi gerekmektedir.
public class AccountOptions { public static bool AllowLocalLogin = true; public static bool AllowRememberLogin = true; public static TimeSpan RememberMeLoginDuration = TimeSpan.FromDays(30); public static bool ShowLogoutPrompt = true; public static bool AutomaticRedirectAfterSignOut = true; public static string InvalidCredentialsErrorMessage = "Invalid username or password"; }
İlgili konfigürasyondan sonra tekrar denediğimizde;
çıkış yapan client’ın Auth Server’a yönlendirildikten sonra otomatik olarak tekrar client’a yönlendirmenin gerçekleştirildiğini gözlemlemekteyiz.
İlgilenenlerin faydalanması dileğiyle…
Sonraki yazılarımda görüşmek üzere…
İyi çalışmalar…
Örnek projeyi indirmek için buraya tıklayınız.