Spring Security Mimarisi Akışı
Spring Security Dersleri’ne devam ediyorum.
Spring Security yazılımlarımız için authencation ve authorization işlerimizi oldukça kolaylaştırsa da bir o kadar karmaşık ve anlaması zor. Derine indikçe ya da sorunlarla karşılaştıkça Spring Security’nin derinliği oldukça fazla olduğu anlaşılıyor.
Bu yazıda Spring Security’nin akışını anlatacağım. Öncelikle Spring Security’nin genel akışı aşağıdaki kavramlar üzerinden yürümektedir.
Authentication
Kimlik Doğrulama demektir. Giriş yapan kullanıcının bilgilerini kontrol edilen ve doğrulunan yerdir.
Authorization
Giriş yapan kullanıcının uygulama üzerindeki erişebilieceği/değiştirebileceği verileri ifade eder.
Principal
Giriş yapan kullanıcının bilgilerini ifade eder.
Granted Authority
Uygulama üzerindeki izinlerini ifade eder.
Roles
Uygulama üzerindeki izin gruplarını ifade etmektedir.
Mimari
Spring Security’nin Mimarisinin kuş bakışı görüntüsü gördüğünüz gibidir.
Kullanıcıdan gelen istek uygulamamıza erişmede AuthenticationFilter istekten kullanıcı adını ve parolayı alır ve bir nesne oluşturulmaktadır.
Oluşturulan Authentication Nesnesinin kullanılması, filtrenin sonrasında Authentication Manager‘a gelir. Oluşturulan nesne içerisinde Granted Authority, Roles, Principal bilgileri bulunmaktadır. Authentication Manager bir interfacedir ve kimlik doğrulama metodu çalıştırılmaktadır. Authentication Manager bir interface olup, Authentication Provider‘a gönderir.
Kimlik doğrulama işlemlerinde hangi tipte bir doğrulama işleminin yapılacağını Authentication Provider‘a bildirir.
Authentication Provider‘ın LdapAuthenticationProvider, CasAuthenticationProvider, DaoAuthenticationProvider gibi farklı providerler mevcuttur. En uygun providerı Authentication Provider seçer.
Authentication Provider, User Details Service‘i çağırır ve kullanıcı bilgilerini karşılık gelen kullanıcıyı bulur getirir. hizmetini kullanarak, kullanıcı adına karşılık gelen Kullanıcı Nesnesini getirir.
User Details Service içerisinde loadUserByUsername metodu içerisinde (hesap kiliti mi veya etkin mi, kimlik bilgileri süresi dolup dolmadığı) gibi bilgilere bakarak karşılık gelen in-memory ya da veritabanı ya da hangi kaynaklardan erişmesi gerekiyorsa erişir ve gelen kullanıcı bilgilerini bulduğu bilgilerini getirir ve eğer doğru kullanıcı bulunduysa ve bulunan kullanıcının nesnesini döndürmektedir. Bu servis içerisinde kullanıcı parolasını doğrulayan Password Encoder bulunmaktadır. Password Encoder kullanıcı parolasının kodlanması ve şifresinin çözülmesi gerektiğini söyleyen arabirimdir.
Security Context, kimliği doğrulanmış kullanıcı hakkında bilgileri içermektedir. Bu kullanıcı bilgileri SecurityContextHolder sayesinde tüm uygulamamız içerisinde kullanabiliriz.
Doğrulanmamış kullanıcı ile karşılaşıldığında ise Authentication Exception fırlatılır.
Doğrulanmış kullanıcı uygulamamız içerisinde Security Context içerisinde tutulmaktadır. Sonradan giriş yapmış olan kullanıcı tekrar erişim istediğinde login olup olmaması kararını Security Context vermektedir. Kullanıcı bilgileri Security Context içerisinde mevcutsa tekrar login olmasına gerek kalmayacaktır.
Kullanıcının Spring Security içerisindeki yolculuğu özetle bu şekilde.
Bir sonraki yazıda görüşmek üzere.
No Comment! Be the first one.