Linux Day2005

38
Copyright © 2005 Emmanuele Bello - TorLUG Web application sicure con Web application sicure con Acegi Security System for Spring Acegi Security System for Spring Roma, Roma, 26 Novembre 2005 26 Novembre 2005

Transcript of Linux Day2005

Page 1: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG

Web application sicure conWeb application sicure con

Acegi Security System for SpringAcegi Security System for Spring

Roma,Roma,26 Novembre 200526 Novembre 2005

Page 2: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 1

AgendaAgenda

• • IntroduzioneIntroduzione

• • Fondamenti di sicurezzaFondamenti di sicurezza

• • AutenticazioneAutenticazione

• • AutorizzazioneAutorizzazione

• • Codice – Info@TVCodice – Info@TV

• • ConclusioneConclusione

Page 3: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 2

IntroduzioneIntroduzione

• • Iniziare a lavorare sul vostro progetto con Acegi Iniziare a lavorare sul vostro progetto con Acegi Security SystemSecurity System

• • RequisitiRequisiti

- Programmazione Java (Standard - Enterprise), Design Patterns, - Programmazione Java (Standard - Enterprise), Design Patterns, XML.XML.

• • Il framework SpringIl framework Spring

• • Sicurezza Enterprise: autenticazione, web-Sicurezza Enterprise: autenticazione, web-request, service security, Domain Object Securityrequest, service security, Domain Object Security

Page 4: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 3

Introduzione 2Introduzione 2

• • La sicurezza è un La sicurezza è un “aspetto”“aspetto” fondamentale... fondamentale...

PrivacyPrivacy

WebWeb

Data SecurityData Security

Object SecurityObject Security

Page 5: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 4

OWASPOWASP The Open Web Application Security Project

• • La Top Ten ha lo scopo di:La Top Ten ha lo scopo di:

• • Nasce per aiutare le aziende a valutare la Nasce per aiutare le aziende a valutare la sicurezza delle applicazioni e dei servizi websicurezza delle applicazioni e dei servizi web

http://www.owasp.org

- sensibilizzare i programmatori sugli errori piu' frequenti;- sensibilizzare i programmatori sugli errori piu' frequenti;

- dare dei parametri immediati per “correre ai ripari”.- dare dei parametri immediati per “correre ai ripari”.

- delineare i perimetri di rischio all'aumentare dei servizi offerti;- delineare i perimetri di rischio all'aumentare dei servizi offerti;

““Il codice della tua applicazione web è parte del tuo sistema di sicurezza!”Il codice della tua applicazione web è parte del tuo sistema di sicurezza!”

Page 6: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 5

OWASPOWASP The Open Web Application Security Project

http://www.owasp.org

OWASP TOP TENOWASP TOP TEN

A1 – Unvalidated InputA1 – Unvalidated Input

A2 – Broken Access ControlA2 – Broken Access Control

A3 – Broken Authentication and Session ManagementA3 – Broken Authentication and Session Management

A4 – Cross Site Scripting (XSS) FlawsA4 – Cross Site Scripting (XSS) Flaws

A5 – Buffer OverflowsA5 – Buffer Overflows

A6 – Injection FlawsA6 – Injection Flaws

A7 – Improper Error HandlingA7 – Improper Error Handling

A8 – Insecure StorageA8 – Insecure Storage

A9 – Denial of ServiceA9 – Denial of Service

A10 – Insecure Configuration ManagementA10 – Insecure Configuration Management

Page 7: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 6

Fondamenti di SicurezzaFondamenti di Sicurezza

Alcuni termini utili per il futuro...Alcuni termini utili per il futuro...

• • Autorizzazione (Authorization) o Access Control:Autorizzazione (Authorization) o Access Control:

• • Principal (username):Principal (username):

• • Credentials (Password):Credentials (Password):

• • Autenticazione (Authentication):Autenticazione (Authentication):- “Controllare se il richiedente è veramente chi dice di essere”- “Controllare se il richiedente è veramente chi dice di essere”

- “Controllare cosa il richiedente, autenticato, puo' fare- “Controllare cosa il richiedente, autenticato, puo' faresull'applicazione o sul sistema”sull'applicazione o sul sistema”

- “Macchine o utenti unicamente identificati nel sistema”- “Macchine o utenti unicamente identificati nel sistema”

- “Qualcosa che il Principal fornisce per provare che è veramente chi dice di essere”- “Qualcosa che il Principal fornisce per provare che è veramente chi dice di essere”

Page 8: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 7

Spring FrameworkSpring Frameworkhttp://www.springframework.org

• • Creato da Rod Johnson - Creato da Rod Johnson - Interface21Interface21; ; versione corrente 1.2.5versione corrente 1.2.5

• • Progetto Open Source:Progetto Open Source:

- Rendere le applicazioni J2EE facili e strutturate, grazie alla sua architettura interna;- Rendere le applicazioni J2EE facili e strutturate, grazie alla sua architettura interna;

- Fornire un buon metodo di programmazione;- Fornire un buon metodo di programmazione;

- Possibilità di usare moduli in modo autonomo o aggregati.- Possibilità di usare moduli in modo autonomo o aggregati.

• • Perchè Spring?Perchè Spring?-- http://www.theserverside.com/articles/content/RodJohnsonInterview/JohnsonChapter4.pdf http://www.theserverside.com/articles/content/RodJohnsonInterview/JohnsonChapter4.pdf

-- http://www.theserverside.com/resources/article.jsp?l=SpringFramework http://www.theserverside.com/resources/article.jsp?l=SpringFramework

Page 9: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 8

Spring FrameworkSpring Frameworkhttp://www.springframework.org

• • OverviewOverview

Page 10: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 9

Spring FrameworkSpring Frameworkhttp://www.springframework.org

• • Full-fledged Spring web applicationFull-fledged Spring web application

Page 11: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 10

Spring FrameworkSpring Frameworkhttp://www.springframework.org

• • CaratteristicheCaratteristiche- Il Core è disegnato per lavorare con i Java Beans; - Il Core è disegnato per lavorare con i Java Beans; lo fa tramite lo fa tramite BeanFactoryBeanFactory..

• • IoC – Inversion of Control PatternIoC – Inversion of Control Pattern- Ogni oggetto espone le proprie dipendenze - Ogni oggetto espone le proprie dipendenze mediante una sorta di contratto invece che mediante una sorta di contratto invece che risolverle automaticamente;risolverle automaticamente;

- Rende le applicazioni flessibili, robuste e - Rende le applicazioni flessibili, robuste e riutilizzabili. Gli oggetti sono disaccoppiati e piu' riutilizzabili. Gli oggetti sono disaccoppiati e piu' gestibili.gestibili.

• • Dependency InjectionDependency Injection- Le dipendenze vengono “iniettate” nei - Le dipendenze vengono “iniettate” nei componenti della applicazione da una componenti della applicazione da una entità entità esternaesterna..

Entità esternaEntità esterna: LightWeight container. Spring, : LightWeight container. Spring, Avalon, PicoContainer, Excalibur, HiveMind, Carbon,...Avalon, PicoContainer, Excalibur, HiveMind, Carbon,...

Page 12: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 11

Spring FrameworkSpring Frameworkhttp://www.springframework.org

• • Service Locator vs. Dependency InjectionService Locator vs. Dependency Injection

Service LocatorService Locator Dependency InjectionDependency Injection

- Devo chiedere le dipendenze al Locator.- Devo chiedere le dipendenze al Locator.

- Dipendo in modo pesante dal Locator.- Dipendo in modo pesante dal Locator.

- Accettabile se devo usare un Locator - Accettabile se devo usare un Locator fatto da me, ma se devo riusare...fatto da me, ma se devo riusare...

- Le dipendenze mi vengono assegnate.- Le dipendenze mi vengono assegnate.

- Non dipendo dal framework e tanto - Non dipendo dal framework e tanto meno dal locator.meno dal locator.

- Non intuitivo.- Non intuitivo.

Tutte queste dipendenze (Setter Method, Constructor, Interface, Context) si Tutte queste dipendenze (Setter Method, Constructor, Interface, Context) si configurano in un file XML, chiamato solitamente configurano in un file XML, chiamato solitamente applicationContext-xyz.xmlapplicationContext-xyz.xml..

Page 13: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 12

Spring FrameworkSpring Frameworkhttp://www.springframework.org

• • Esempio di Dependency Injection usando la Esempio di Dependency Injection usando la tecnica “Setter Methods”tecnica “Setter Methods”

<bean id=”exampleBean” class=”examples.ExampleBean”><property name=”beanOne”><ref bean=”anotherBean”/></property><propetry name=”beanTwo”><ref bean=”someBean” /></propery><property name="integerProperty">1</property></bean>

<bean id=”anotherBean” class=”examples.AnotherBean” /><bean id=”someBean” class=”examples.someBean” />

public class ExampleBean {/* Variabili di istanza */private AnotherBean beanOne;   private someBean beanTwo;private int i;

public void setBeanOne(AnotherBean beanOne) { this.beanOne = beanOne; }public void setBeanTwo(SomeBean beanTwo ) { this.beanTwo = beanTwo; }public void setIntegerProperty(int i ) { this.i = i; }}

PPlainlainOOldldJJavaavaOObjectbject

Page 14: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 13

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • Creato da Creato da Ben AlexBen Alex; versione corrente ; versione corrente 0.9.00.9.0; ; pienamente appoggiato dagli autori di Springpienamente appoggiato dagli autori di Spring

- Fornire un layer di sicurezza per le - Fornire un layer di sicurezza per le applicazioni “Spring oriented”.applicazioni “Spring oriented”.

• • Obiettivi del progetto:Obiettivi del progetto:

- Puo' essere usato fuori del contesto di - Puo' essere usato fuori del contesto di Spring.Spring.

http://acegisecurity.sourceforge.net/standalone.htmhttp://acegisecurity.sourceforge.net/standalone.htmll

• • Mailing list ufficiale del progetto:Mailing list ufficiale del progetto:

http://acegisecurity.sourceforge.net/mail-lists.htmlhttp://acegisecurity.sourceforge.net/mail-lists.html

...scrivete Acegi Security System!!!...scrivete Acegi Security System!!!

Page 15: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 14

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • FondamentiFondamenti

Security Security InterceptorInterceptor

Access Decision Access Decision ManagerManager

Run-as Run-as ManagerManager

Authentication Authentication ManagerManager

Richieste webRichieste web

==

Page 16: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 15

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • Security InterceptorSecurity Interceptor- Pensato come una serratura, per sbloccarla dovete darle qualche cosa, - Pensato come una serratura, per sbloccarla dovete darle qualche cosa, tipicamente username e password (Principal&Credentials) per accedere al tipicamente username e password (Principal&Credentials) per accedere al sistema.sistema.

• • Authentication ManagerAuthentication Manager- E' responsabile nel determinare chi è il richiedente, ovviamente lo fa valutando - E' responsabile nel determinare chi è il richiedente, ovviamente lo fa valutando ID e PWD. Se lo avete convinto ora il sistema sa con chi ha a che fare!ID e PWD. Se lo avete convinto ora il sistema sa con chi ha a che fare!

• • Access Decision ManagerAccess Decision Manager- E il responsabile delle autorizzazioni concesse a chi risulta autenticato. - E il responsabile delle autorizzazioni concesse a chi risulta autenticato. Autorizza in base alle credenziali, e ad informazioni di sicurezza (ad esempio il Autorizza in base alle credenziali, e ad informazioni di sicurezza (ad esempio il Ruolo “ROLE_”).Ruolo “ROLE_”).

• • Run-As ManagerRun-As Manager- Pensato per restringere maggiormente la zona sicura di accesso per un utente. - Pensato per restringere maggiormente la zona sicura di accesso per un utente. Puo' essere usato per sostituire “Puo' essere usato per sostituire “AuthenticationAuthentication” e dargli +/- potere.” e dargli +/- potere.

Page 17: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 16

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • AutenticazioneAutenticazione- Determinare in modo univoco l'identità di un utente.- Determinare in modo univoco l'identità di un utente.

- Chi si preoccupa di stabilire l'identità è:- Chi si preoccupa di stabilire l'identità è:

net.sf.acegisecurity.AuthenticationManager

public interface AuthenticationManager {public Authentication authenticate(Authentication authentication)

throws AuthenticationException;}

PrincipalPrincipal

CredentialsCredentialsAuthenticationAuthentication

authenticate (...)authenticate (...)AuthenticationAuthentication

...facile no? Ma devo scrivere una mia classe? Se voglio... ma di default ci ...facile no? Ma devo scrivere una mia classe? Se voglio... ma di default ci pensa Acegi Security System, vediamo come...pensa Acegi Security System, vediamo come...

Page 18: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 17

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • ProviderManager ProviderManager implements AuthenticationManagerimplements AuthenticationManager

- Delega la responsabilità di autenticarsi ai provider.- Delega la responsabilità di autenticarsi ai provider.

Provider Provider ManagerManager

Dao Dao Authentication Authentication

ProviderProvider

Jass Jass Authentication Authentication

ProviderProvider

Password Dao Password Dao Authentication Authentication

ProviderProvider

Cas Cas Authentication Authentication

ManagerManager

Remote Remote Authentication Authentication

ProviderProvider

<bean id="authenticationManager" class="net.sf.acegisecurity.providers.ProviderManager"><property name="providers">

<list><ref bean="daoAuthenticationProvider"/><ref bean="passwordDaoProvider"/>

</list></property>

</bean>

Page 19: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 18

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • Autenticazione su DataBase Autenticazione su DataBase esempioesempio

- Posso usare due providers, quali:- Posso usare due providers, quali:

* * DaoAuthenticationProviderDaoAuthenticationProvider – il DAO esegue la vera autenticazione; – il DAO esegue la vera autenticazione;

* * PasswordDaoAuthenticationProviderPasswordDaoAuthenticationProvider – la responsabilità è esterna – la responsabilità è esterna al DAO (es. Ligthweight Directory Access Protocol).al DAO (es. Ligthweight Directory Access Protocol).

Authentication Authentication ManagerManager

Dao Dao Authentication Authentication

ProviderProvider

Authentication Authentication DaoDao

authenticate ()authenticate () loadByUsername()loadByUsername()

User User DatabaseDatabase

<bean id="authenticationProvider” class="net.sf.acegisecurity.providers.dao.DaoAuthenticationProvider">

<property name="authenticationDao"><ref bean="authenticationDao"/>

</property></bean>

...magari customizzato (InfoTvAuthenticationDao.java)

Page 20: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 19

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • Password EncryptionPassword Encryption- OWASP (A3): Broken authentication/session management- OWASP (A3): Broken authentication/session management

- Di default il DaoAuthenticationProvider assume che - Di default il DaoAuthenticationProvider assume che la passowrd è in chiaro.la passowrd è in chiaro.

* * PlainTextPasswordEncoderPlainTextPasswordEncoder – (defualt) nessuna codifica; – (defualt) nessuna codifica;

* * Md5PasswordEncoderMd5PasswordEncoder – usa Md5 per la codifica; – usa Md5 per la codifica;

* * ShaPasswordEncoderShaPasswordEncoder – usa Secure Hash Algorithm per la codifica. – usa Secure Hash Algorithm per la codifica.

- Modifcate il DaoAuthenticationProvider, aggiungendo la proprietà...- Modifcate il DaoAuthenticationProvider, aggiungendo la proprietà...

<property name="passwordEncoder"><bean class="net.sf.acegisecurity.providers.encoding.Md5PasswordEncoder"/>

</property>

- Possiamo dare anche un po' di “sale” alla password:- Possiamo dare anche un po' di “sale” alla password:

* * ReflectionSaltSourceReflectionSaltSource – usa una proprietà dell'oggetto User; – usa una proprietà dell'oggetto User;

* * SystemWideSaltSourceSystemWideSaltSource – usa la stessa proprietà per tutti gli utenti; – usa la stessa proprietà per tutti gli utenti;

<property name="saltSource"><bean class="net.sf.acegisecurity.providers.dao.salt.ReflectionSaltSource"/>

</property>

Page 21: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 20

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • CachingCaching- Potrebbe essere utile avere le informazioni di un utente - Potrebbe essere utile avere le informazioni di un utente autenticato senza dovere fare continuamente query sul DB.autenticato senza dovere fare continuamente query sul DB.

public interface UserCache {public UserDetails getUserFromCache (String username);public void putUserInCache (UserDetails user);public void removeUserFromCache (String username);

}

- Il DaoAuthenticationProvider supporta il caching, implementando - Il DaoAuthenticationProvider supporta il caching, implementando net.sf.acegisecurity.providers.dao.UserCache

- Acegi Security System fornisce due comode implementazioni, quali:- Acegi Security System fornisce due comode implementazioni, quali:

* * net.sf.acegisecurity.providers.dao.cache.NullUserCachenet.sf.acegisecurity.providers.dao.cache.NullUserCache

* * net.sf.acegisecurity.providers.dao.cache.EhCacheBasedUserCachenet.sf.acegisecurity.providers.dao.cache.EhCacheBasedUserCache

http://ehcache.sourceforge.net/http://ehcache.sourceforge.net/

- Cache Open Source in Java.- Cache Open Source in Java.

Page 22: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 21

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • Controllo degli accessiControllo degli accessi- Dopo essersi autenticati occorre avere il permesso di - Dopo essersi autenticati occorre avere il permesso di accedere alle risorse del sistema. AccessDecisionManager.accedere alle risorse del sistema. AccessDecisionManager.

public interface AccessDecisionManager {public void decide(Authentication authentication, Object object, ConfigAttributeDefinition config)

throws AccessDeniedException;public boolean supports(ConfigAttribute attribute);public boolean supports(Class clazz);

}

- Acegi Security System fornisce tre implementazioni, quali:- Acegi Security System fornisce tre implementazioni, quali:

* * net.sf.acegisecurity.vote.AffirmativeBased net.sf.acegisecurity.vote.AffirmativeBased – permette l'accesso se – permette l'accesso se almeno uno vota a favore;almeno uno vota a favore;

* * net.sf.acegisecurity.vote.ConsensusBased net.sf.acegisecurity.vote.ConsensusBased – permette l'accesso se tutti – permette l'accesso se tutti votano a favore;votano a favore;

net.sf.acegisecurity.AccessDecisonManager

* * net.sf.acegisecurity.vote.UnanimousBased net.sf.acegisecurity.vote.UnanimousBased – permette l'accesso se – permette l'accesso se nessuno lo nega (alcuni possono pure astenersi).nessuno lo nega (alcuni possono pure astenersi).

...come configurarlo lo avete imparato :-)...come configurarlo lo avete imparato :-)

Page 23: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 22

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • Controllo degli accessi (2)Controllo degli accessi (2)- Definito il manager servono i Voters, ovvero gli- Definito il manager servono i Voters, ovvero gli

public interface AccessDecisionVoter {public static final int ACCESS_GRANTED = 1;public static final int ACCESS_ABSTAIN = 0;public static final int ACCESS_DENIED = -1;

public boolean supports(ConfigAttribute attribute);public boolean supports(Class clazz);public int vote(Authentication authentication, Object object, ConfigAttributeDefinition config);

}

net.sf.acegisecurity.vote.AccessDecisionVoter

- Acegi Security System fornisce:- Acegi Security System fornisce:

net.sf.acegisecurity.vote.RoleVoter

<bean id="roleVoter"class="net.sf.acegisecurity.vote.RoleVoter"/>

...sentirete la necessità di customizzare il vostro RoleVoter!...sentirete la necessità di customizzare il vostro RoleVoter!

Page 24: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 23

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • ...ricordate la serratura?...ricordate la serratura?

- La sicurezza web è basata su filtri servlet.- La sicurezza web è basata su filtri servlet.

Intercettano le richieste web e applicano un certo processo Intercettano le richieste web e applicano un certo processo sicuro.sicuro.

Richiesta webRichiesta webServlet filtersServlet filters

Page 25: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 23-b

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• ...ricordate la serratura?...ricordate la serratura?

- I filtri servlet di Acegi Security System- I filtri servlet di Acegi Security System

* * Channel-processing filter Channel-processing filter – assicura le redirect su canale protetto (HTTPS ad esempio);– assicura le redirect su canale protetto (HTTPS ad esempio);

* * Authentication-processing filter Authentication-processing filter – accetta le richieste di autenticazione e le invia – accetta le richieste di autenticazione e le invia all'authenticatioon manager;all'authenticatioon manager;

* * CAS-processing filter CAS-processing filter – accetta tickets per le Central AuthenticaionService;– accetta tickets per le Central AuthenticaionService;

* * HTTP Basic authorization filter HTTP Basic authorization filter – processa autenticazioni basate su HTTP base;– processa autenticazioni basate su HTTP base;

* * Integration filter Integration filter – gestisce il contenitore di oggetti authentication attraverso le request;– gestisce il contenitore di oggetti authentication attraverso le request;

* * Security enforcement filter Security enforcement filter – assicura che l'utente dopo essere autenticato possa – assicura che l'utente dopo essere autenticato possa accedere alle risosrse web.accedere alle risosrse web.

Page 26: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 24

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • ...quindi......quindi... Request

Channel-Processing FilterChannel-Processing Filter(opzionale)(opzionale)

Authentication-Processing Authentication-Processing FilterFilter

Integration FilterIntegration Filter

Security EnforcementSecurity EnforcementFilterFilter

...trovate la sequenza sulla guida!

Page 27: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 25

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • ...ancora qualche concetto ......ancora qualche concetto ...- I filtri nel descrittore di deployment (web.xml) li vediamo - I filtri nel descrittore di deployment (web.xml) li vediamo dal vivo...dal vivo...

- - SecurityEnforcementFilterSecurityEnforcementFiltercapisce se la richiesta e di autenticazione o di autorizzazione e capisce se la richiesta e di autenticazione o di autorizzazione e quindi delega ai managerquindi delega ai manager.

<bean id="securityEnforcementFilter"class="net.sf.acegisecurity.intercept.web.SecurityEnforcementFilter">

<property name="securityInterceptor"><ref bean="securityInterceptor"/>

</property>

<property name="authenticationEntryPoint"><ref bean="authenticationEntryPoint"/>

</property>

</bean>

Page 28: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 26

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

- - FilterSecurityInterceptorFilterSecurityInterceptor

<bean id="securityInterceptor" class="net.sf.acegisecurity.intercept.web.FilterSecurityInterceptor">

<property name="authenticationManager"><ref bean="authenticationManager"/>

</property>

<property name="accessDecisionManager"><ref bean="accessDecisionManager"/>

</property>

<property name="objectDefinitionSource"><value>

CONVERT_URL_TO_LOWERCASE_BEFORE_COMPARISON\A/admin/.*\Z=ROLE_ADMIN\A/student/.*\Z=ROLE_STUDENT,ROLE_ALUMNI\A/instruct/.*\Z=ROLE_INSTRUCTOR

</value></property>

</bean>

Page 29: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 27

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

- - AuthenticationEntryPointAuthenticationEntryPoint

<bean id="authenticationEntryPoint" class="net.sf.acegisecurity.ui.webapp.AuthenticationProcessingFilterEntryPoint">

<property name="loginFormUrl"><value>/jsp/login.jsp</value>

</property>

<property name="forceHttps"><value>true</value></property></bean>

<form method="POST" action="j_acegi_security_check">

<input type="text" name="j_username"><br><input type="password" name="j_password"><br><input type="submit">

</form>

Sulla pagina:Sulla pagina:

Page 30: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 28

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

- - AuthenticationProcessingFilterAuthenticationProcessingFilter

<bean id="authenticationProcessingFilter"class="net.sf.acegisecurity.ui.webapp.AuthenticationProcessingFilter">

<property name="filterProcessesUrl"><value>/j_acegi_security_check</value>

</property>

<property name="authenticationFailureUrl"><value>/jsp/login.jsp?failed=true</value>

</property>

<property name="defaultTargetUrl"><value>/</value>

</property>

<property name="authenticationManager"><ref bean="authenticationManager"/>

</property>

</bean>

Page 31: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 29

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

- - Authorization-Related Tag Libraries - authz.tldAuthorization-Related Tag Libraries - authz.tld

Rendono piu' facile la scrittura di pagine JSP.Rendono piu' facile la scrittura di pagine JSP.

Quali sono: AuthorizeTag, AuthenticationTag, AclTag.Quali sono: AuthorizeTag, AuthenticationTag, AclTag.

Nel web.xmlNel web.xml

<taglib> <taglib-uri>http://acegisecurity.sf.net/authz</taglib-uri> <taglib-location>/WEB-INF/authz.tld</taglib-location></taglib>

Nelle JSPNelle JSP

<authz:authorize ifAllGranted="ROLE_SUPERVISOR"> ...

JSP Page ...</authz:authorize>

Page 32: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 30

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • Alcune features interessanti...Alcune features interessanti...- - Acegi Security System EventsAcegi Security System Events

Usati dalla classe AuthenticationProvider per informare il Usati dalla classe AuthenticationProvider per informare il sistema di cio' che accade;sistema di cio' che accade;

Catturarli è semplice...Catturarli è semplice...

...import org.springframework.context.ApplicationListener;...

public MioListener implements ApplicationListener {

public void onApplicationEvent(ApplicationEvent event) {

if (event instanceof AuthenticationFailureUsernameNotFoundEvent) {...

}}

}

Logger, UserLocker, etc.Logger, UserLocker, etc.

Page 33: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 31

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • Alcune features interessanti...Alcune features interessanti...- - Access Control List (ACL) SecurityAccess Control List (ACL) Security

Molto interessanti per grandi applicazioniMolto interessanti per grandi applicazioni

net.sf.acegisecurity.aclnet.sf.acegisecurity.acl

Default maschera Unix-like (rwx)Default maschera Unix-like (rwx)

ACL

Authentication

MethodInvocation

DomainObject

Page 34: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 32

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • Alcune features interessanti...Alcune features interessanti...- - Aspect Oriented Programming (AOP)Aspect Oriented Programming (AOP)

Method Security InterceptorMethod Security Interceptor

http://aopalliance.sourceforge.net./http://aopalliance.sourceforge.net./

AspectJSecurityInterceptorAspectJSecurityInterceptor

Page 35: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 33

Links & co.Links & co.- Starting point- Starting point

- Papers- Papers

- Forum & ML- Forum & ML

https://appfuse.dev.java.net/https://appfuse.dev.java.net/

Acegi Security System reference: Acegi Security System reference:

http://acegisecurity.sourceforge.net/docbook/acegi.htmlhttp://acegisecurity.sourceforge.net/docbook/acegi.html

“Spring in Action”

Craig Walls, Ryan Breidenbach - Manning

http://oness.sourceforge.net/http://oness.sourceforge.net/

Forum Spring:Forum Spring:

http://forum.springframework.org/http://forum.springframework.org/

Spring Mailing List:Spring Mailing List:

https://lists.sourceforge.net/lists/listinfo/springframework-developerhttps://lists.sourceforge.net/lists/listinfo/springframework-developer

Page 36: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 34

Acegi Security SystemAcegi Security Systemhttp://acegisecurity.sourceforge.net/

• • ...vediamo il codice......vediamo il codice...

Page 37: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG 35

DomandeDomande

Page 38: Linux Day2005

Copyright © 2005 Emmanuele Bello - TorLUG

GRAZIE...GRAZIE...

Emmanuele BelloEmmanuele Bello

[email protected]@torlug.org

http://www.torlug.orghttp://www.torlug.org

[email protected]@torlug.org