10 Mayıs 2013 Cuma

Spring Security


Spring Security Yükleme
Is there a Spring Security default configuration file name?   sorusunda Spring Security ayarlarını yüklemekle ilgili verilen cevapta ayarları yüklemek için verilen seçenekler arasında bence en kolay olanı contextConfigLocation yöntemini kullanmak.



XML Dosyasının İçi
Aşağıda küçük bir örnek var.

Kimlik Doğrulama

Kimlik Doğrulama İçin Token ile İstekte Bulunma
Spring kimlik doğrulama için AuthenticatonProvider arayüzünden türeyen ve doğrulama işlemini gerçekleştiren sınıflar sunuyor. Benim en çok işime yarayan ActiveDirectory ile kimlik doğrulamayı sağlayan ActiveDirectoryLdapAuthenticationProvider sınıfı. Aşağıda bu sınıfın hiyerarşisi var.


Kimlik Doğrulama Sonucu

Kimlik doğrulama işlemi sonucunda yine bir Authentication nesnesi döndürülür. Aşağıdaki şekil ile durumu görmek mümkün.

Wicket ve AuthenticationManager
Wicket ve AuthenticationManager ile aşağıdaki gibi ilişkilendirilir. WebApplication sınıfı ilk defa bağlanan tarayıcı için newSession metod aracılığıyla bir session nesnesi yaratılmasını sağlar. Session nesnesi tarayıcının gönderdiği locale bilgisini saklar. Aşağıdaki kod parçasında bu durumu görebiliriz. Eğer tarayıcı Türkçe ise locale tr_TR, İngilizce ise en_US olacaktır.



Bir başka şekil ise aşağıda

Verilen Kullanıcıyı Bulma

Bu iş için UserDetailsService arayüzü kullanılıyor. Buradaki örnek soru çok açıklayıcı.

Spring Security Authentication Bridge

Spring Security'nin sadece Authentication hiyerarşisini gösteren kısmı buradan aldım ve aşağıya ekledim.

Bir çok uygulama Spring Security ile gelen diğer ek işlevlere ihtiyaç duymaz.  Örneğin Spring ile gelen Interceptor modelini buradan aldım ve aşağıya ekledim. Şekilden de görüldüğü gibi Interceptor modeli AuthenticationManager'a sadece ucundan dokunmaktadır ancak bir çok uygulamanın bu kadar kapsamlı paketlere ihtiyacı yoktur.



Apache Wicket ile verilen örneklerde bu tarzın benimsendiğini gördüm. Sadece Spring Security'nin gerekli kısmını içine almak için buradan aldığım ve aşağıya eklediğim örnekteki gibi bir köprü kullanır.
Köprü vasıtası ile Spring Authentication paketlerini rahatça kullanma imkanı doğar.

Http ve Spring Security Authentication Bridge

Yukarıdaki anlatımda Http protokolü olmadan Spring Security Authentication kullanılabileceğini farz etmiştim. Örneğin masaüstü bir Swing uygulaması gibi. Ancak işin içine Http girince Spring Security ile gelen Filter Chain'i de resme dahil etmek gerekiyor.

Spring Security ile teferruatlı bir Http filtre zinciri de geliyor. Aşağıda bu filtrelerin önceliklerini gösteren bir şekil var. En üstteki filtre ilk çalışması gereken filtre.

SecurityContextPersistenceFilter

Http protokolünün kullanıldığı ortamlarda bir kere authentication işlemi yapıldıktan sonra diğer istekler için tekrar authentication yapılmasın ve önceki bilgiler Http Session'dan alınsın isteniyorsa SecurityContextPersistenceFilter filtresini kullanmak gerekiyor. Bu filtrenin Spring 2.0'daki ismi HttpSessionContextIntegrationFilter idi.

Filtrenin çalışma prensibi burada anlatılıyor. Bu filtrenin default çalışma şeklinde buradan aldığım şekilde de görüldüğü gibi SecurityContext her bir istek için o isteği işleyecek thread'in threadlocal alanına atanıyor.
UserNamePasswordAuthenticationFilter

Bu filtre ile buradan aldığım aşağıdaki şekildeki gibi şifre doğrulama işlemi yapma ve AuthenticationSuccessHandler arayüzünü kullanarak doğrulama işleminden sonra şifre değiştirmeyi talep etme gibi işlemleri yapmak mümkün.

 
Görüldüğü gibi Spring Security kapsamlı ama ister istemez kendini yazılımın bir çok noktasına dahil ediyor.

Hiç yorum yok:

Yorum Gönder