You are on page 1of 30

Spring Security

Framework

Harezmi Bilişim Çözümleri

www.java-egitimleri.com 1
Ajanda

 Güvenlik İhtiyaçlarına Genel Bakış


 Spring Security Nedir? & Özellikleri
 Neden Spring Security?
 Spring Security Yapıtaşları
 Spring Security Filter Zinciri
 Kimliklendirme & Kimliklendirme Modeli
 Başarılı ve Başarısız Login Akış Örnekleri
www.java-egitimleri.com 2
Ajanda

 Yetkilendirme
 Yetkilendirme Akışı & Yetkilendirme Modeli
 Namespace Konfigürasyonu
 Namespace ile Spring Security Kullanımı

www.java-egitimleri.com 3
Güvenlik İhtiyaçlarına
Genel Bakış
 Kurumsal uygulamaların 2 temel güvenlik
ihtiyacı söz konusudur
1.Kimliklendirme (Authentication)
2.Yetkilendirme (Authorization)
 Web isteklerinin yetkilendirilmesi
 Servis metodlarının yetkilendirilmesi
 Domain nesnelerine yetki bazında erişim
sağlanması
 Nesnelerin attribute'ları düzeyinde erişim
www.java-egitimleri.com 4
Spring Security Nedir?

 Kurumsal Java uygulamaları için


authentication ve authorization servisleri
sağlayan bir framework
 2004 yılında Spring üzerine kurulu Acegi
Security Framework adı ile ortaya çıkmıştır
 2007 yılına gelindiğinde Spring ürün
portföyünde yer almıştır

www.java-egitimleri.com 5
Özellikleri

 Pek çok değişik kimliklendirme


(authentication) yöntemini
desteklemektedir
 Form tabanlı, basic, digest, NTLM,
Kerberos, JAAS...
 CAS, OpenID, Siteminder gibi SSO
çözümleri ile entegre çalışabilmektedir
 Kullanıcı bilgisinin değişik ‘realm’lerdan
(Memory, LDAP, JDBC...) alınmasını sağlar
www.java-egitimleri.com 6
Özellikleri

 Çalışma zamanında dinamik olarak


kullanıcı bilgisinin değiştirilmesini sağlar
 Aynı kullanıcının sisteme erişim sayısını
yönetir
 Otomatik olarak “remember me” desteği
sunar
 URL, metod ve domain nesneleri
düzeyinde yetkilendirme sağlar
www.java-egitimleri.com 7
Özellikleri

 RMI ve HttpInvoker gibi remote method


çağrılarında kimlik bilgisinin istemciden
sunucuya taşınmasını sağlar
 Web Container’ları ile entegre çalışabilir
 Güvenlikli bir HTTP iletişimi kurmaya
yardımcı olur
 Güvenlikle ilgili HTTP response
header'larını yönetebilir
www.java-egitimleri.com 8
Neden Spring Security?

 Neden web.xml security değil?


 Neden JAAS değil?

www.java-egitimleri.com 9
Neden web.xml
security değil?
 Web container’a bağımlı bir kimliklendirme
altyapısı ortaya çıkar
 Web kaynaklarını(URL) yetkilendirmek için
sınırlı bir model mevcuttur
 Uygulamada metod ve domain nesneleri
düzeyinde yetkilendirme yapmak mümkün
değildir

www.java-egitimleri.com 10
Neden JAAS değil?

 JRE düzeyinde karmaşık tanımlar


yapılmaktadır
 Yine container düzeyinde bağımlılık ortaya
çıkmaktadır
 Kimliklendirme tarafı istenirse JAAS’a
havale edilebilir

www.java-egitimleri.com 11
Temel Yapıtaşları:
Kullanıcı – Rol İlişkisi

Onay Personeli Sorgulama Personeli Giriş


Rolü Rolü Personeli Rolü
Secure
Resource

Secure resource,
Bir web sayfası,
Servis metodu veya
Domain nesnesi olabilir

Kullanıcı

www.java-egitimleri.com 12
Temel Yapıtaşları :
Rol Grubu – Rol İlişkisi
Onay Personeli Sorgulama Personeli Giriş
Rolü Rolü Personeli Rolü

Sistem Admin
Rolü

Kullanıcı

www.java-egitimleri.com 13
Temel Yapıtaşları:
Domain Sınıfları
Uygulamanın security context Kullanıcıların yetkileri
bilgisinin tutulduğu yerdir GrantedAuthority ile ifade edilir
Default olarak bu bilgi
ThreadLocal bir yapıda tutulur

Başarılı bir
kimliklendirme
sonucunda
UserDetails Uygulamaya o anda erişen username
Authentication'a, kullanıcı bilgisi principal bilgisini kullanarak
o da SecurityContext'e olarak ifade edilir UserDetails ilgili
Yerleştirilir realm'den yüklenir

Security Principals
Context bilgisi
Bilgisini (çoğu zaman)
Request UserDetails tipinde bir nesnedir, uygulamaların User sınıfları
aralıklarında bu arayüzü implement eder
HttpSession'da saklar www.java-egitimleri.com 14
Spring Security Filter
Zinciri
HTTP Request

Web isteğinin
HTTPS’den
ChannelProcessing gelmesini
Filter garanti eder

Kullanıcının
oturum
sayısını
kontrol eder
ConcurrentSession
Filter

Web isteğinin
sonunda
SecurityContext’
SecurityContext i HttpSession’da
Persistence saklar
Filter
www.java-egitimleri.com 15
Spring Security Filter
Zinciri
Logout işlemini LogoutFilter
gerçekleştirir

UsernamePassword Authentication
işlemini
Web isteğinin Authentication gerçekleştirir
getRemoteUser(), Filter
isUserInRole()
metodlarında
SecurityContext’i SecurityContext
kullanmasını
sağlar
HolderAware
RequestFilter Web isteğinde
remember-me
cookie mevcutsa,
değerini
RememberMe SecurityContextH
older’a set eder
Authentication
Filter
www.java-egitimleri.com 16
Spring Security Filter
Zinciri
SecurityContext
Holder’a
anonymous
Anonymous Authentication
AuthenticationFilter token’ı koyar
FilterSecurityInt
erceptor'de
meydana gelen
AuthenticationEx
ception ve
AccessDeniedExc ExceptionTranslation
eption'ların Filter
uygun sayfalara
yönlendirilmesini Hedef URL’e
sağlar yetkiye göre
erişilmesini
FilterSecurity sağlar.
Interceptor AuthenticationE
xception veya
AccessDeniedEx
ception
fırlatabilir
secureWebPage.jsp
www.java-egitimleri.com 17
Spring Security
Konfigürasyonu
<filter>
<filter-name> web.xml içerisinde
springSecurityFilterChain DelegatingFilterProxy ile
</filter-name> Bir Servlet Filter tanımı
<filter-class> yapılır
org.springframework.web.filter.DelegatingFilterProxy
</filter-class>
</filter>

<filter-mapping>
<filter-name>
springSecurityFilterChain
</filter-name>
<url-pattern>/*</url-pattern>
</filter-mapping>
www.java-egitimleri.com 18
Spring Security
Konfigürasyonu

Servlet Container
DelegatingFilterProxy sınıfı,
web.xml içerisindeki tanım
ile ApplicationContext içinde
tanımlı Filter bean'ları
Delegating Web
arasında köprü vazifesi görür Resource
FilterProxy

Web client
ApplicationContext
springSecurityFilterChain

FilterChainProxy'de web.xml
içerisinde tek bir filter ile bütün Filter Filter Filter
security filter zincirinin 1 2 n
tanımlanmasını sağlar

www.java-egitimleri.com 19
Kimliklendirme Modeli
Başarılı kimliklendirme sonucu
Kimliklendirmenin başladığı yer AbstractAuthentication Authentication nesnesi oluşur
ProcessingFilter'dır. Her auth yönteminin kendine Farklı auth yöntemlerinin kendine
özel bir sub class'ı mevcuttur özel token impl mevcuttur

Kimliklendirmeyi
AuthenticationManager Asıl işlem
koordine eder. İşi Auth
AuthenticationProvider Provider'da
nesnelerine delege eder gerçekleşir

Her auth yönteminin kendine özel


www.java-egitimleri.com bir impl mevcuttur 20
Başarısız Bir
Login Akışı
Throws Authentication
Exception ROLE_EDITOR
1:HTTP request
to editor.jsp
FilterSecurity
Interceptor editor.jsp
2:ExceptionTranlationFilter
Redirect to authentication
entry point: login.jsp 3:Submit form to: 4:try to
ksevindik /j_spring_security_check UsernamePassword authenticate user
Authentication
**********
Filter

Authentication
6:Redirect to authentication Manager
failure url: login.jsp?hata=true
Giriş hatası 5:throws Authentication
www.java-egitimleri.com Exception 21
Başarılı Bir
Login Akışı
1:HTTP request ROLE_EDITOR
to editor.jsp
FilterSecurity
Interceptor editor.jsp
2:ExceptionTranlationFilter
Redirect to authentication 7:Redirect to targetUrl if
entry point: login.jsp found
3:Submit form 4:Try to
ksevindik to:/j_spring_security_ch UsernamePassword authenticate user
eck Authentication
**********
Filter
6:Store Authentication
Authentication Manager
7:Redirect to token
index.jsp defaultTargetUrl 5:Return
Authentication
SecurityContextHolder
token
www.java-egitimleri.com 22
Yetkilendirme

 Yetkilendirme işlemine tabi tutulan


herhangi bir nesneye “secure object”
denir
 Aşağıdakilerden herhangi birisi secure
object olabilir
 Web istekleri
 Metot çağrıları
 Domain nesneleri
www.java-egitimleri.com 23
Yetkilendirme

 Spring Security, yetkilendirme için AOP


“around advice” yöntemini kullanır
 Her bir secure nesne tipine göre farklı
interceptor'ler devreye girer
 Web istekleri → FilterSecurityInterceptor
 Metot çağrıları → MethodSecurityInterceptor

Domain nesneleri →AspectJ veya ACL

www.java-egitimleri.com 24
Yetkilendirmenin İşleyişi
Secured object tipine göre farklı AccessDecisionManager,
İnterceptor'ler vardır erişim yetkisi için Voter
nesnelerine danışır
SecuritytInterceptor
Access
Secured object'e *
AccessDecisionManager Decision
erişim Secured Voter
Object
Secured object'e Interceptor Authentication, ConfigAttributes,
erişim interceptor ve secured object üçlüsünü AccessDecisionManager'a iletir
tarafından yakalanır
SecurityContext

Her bir secured object Config Authentication


İçin tanımlanmış erişim Attribute
kuralları (ConfigAttribute)
vardır

www.java-egitimleri.com 25
Yetkisiz Erişim Örneği

1:HTTP request from User with Throws AccessDenied


Exception ROLE_EDITOR
ROLE_READER to editor.jsp

SecurityContext FilterSecurity
editor.jsp
PersistenceFilter Interceptor

3:ExceptionTranlationFilter
Authentication nesnesi Redirect to accessDenied page
HttpSession'dan alınıp
ThreadLocal Security
Context'e yerleştirilir

accessDenied.jsp

www.java-egitimleri.com 26
Namespace
Konfigürasyonu
 Acegi Security’deki en büyük problem
bean’ların ugun biçimde ve sırada
tanımlanması idi
 Spring Security 2.0 ile birlikte gelmiştir
 Basit bir XML tanımı ile bir grup bean
konfigürasyonu ile yapılmak istenen
tanımlama yapılabilmektedir

www.java-egitimleri.com 27
Namespace
Konfigürasyonu
 <security:ldap-server/> tanımı uygulama
içinde LDAP ayarlarının yapılması ve test
amaçlı embedded LDAP server’ın
çalıştırılması için yeterli olmaktadır
 Geliştiriciler LDAP kabiliyetini kullanmak
için hangi bean tanımlarının yapılması,
hangi property değerlerinin set edilmesi
gerektiğini bilmek zorunda değildirler

www.java-egitimleri.com 28
Namespace ile
Spring Security Kullanımı
 Form login konfigürasyonu
 Logout işlemi
 Kriptolu şifrelerin kullanılması
 Beni hatırla kabiliyeti
 Oturum yönetimi
 Web kaynaklarının yetkilendirilmesi
 Metot düzeyinde yetkilendirme
www.java-egitimleri.com 29
İletişim
 Harezmi Bilişim Çözümleri
 Kurumsal Java Eğitimleri
 http://www.java-egitimleri.com
 info@java-egitimleri.com

www.java-egitimleri.com 30

You might also like