Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername...

24
Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. Spring Security 2.0 Mike Wiesner SpringSource Germany Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited. Über mich • Senior Consultant bei SpringSource Germany • Acegi-/Spring-Consulting • Trainings • IT-Security Consulting / Reviews [email protected] 2

Transcript of Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername...

Page 1: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Spring Security 2.0

Mike Wiesner

SpringSource Germany

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Über mich

• Senior Consultant bei SpringSource Germany

• Acegi-/Spring-Consulting

• Trainings

• IT-Security Consulting / Reviews

[email protected]

2

Page 2: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Agenda

• Spring Security?

• Was gibt es in M1

• Was kommt noch

• Fazit

3

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Was ist das?

• Der Nachfolger des Acegi Security Systems for Spring

• Ein Sicherheitsframework für Java-Anwendungen

• Umsetzung von Best Practices und Security Patterns

• Integration bewährt Technologien– Spring AOP, AspectJ, LDAP, JA-SIG CAS, ...

4

Page 3: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Ich brauch das nicht...

• ... weil ich keine Hochsicherheitsanwendung hab.

• Wirklich?– Kein Login?

– Keine Rechteprüfung?

– Keine URL-Filter?

– Keine Anbindung von LDAP?

– Kein Single-Sign-On?

5

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Spring Security ist nur für Webanwendungen!?

• Kernkomponenten haben keine Abhängigkeit zum Web

• Web ist nur EIN Einstiegspunkt

• Das entscheidende passiert auf Service-Ebene

• Fertige Unterstützung für ...– Webservices

– RMI

– HttpInvoker

• Immer offen für eigene Erweiterungen

6

Page 4: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Das geht nur bei Spring-Anwendungen!?

• Integration in Java mit AspectJ möglich– Verwendbar für (jede) Java Anwendung

• Integration im Web mit Servlet Filtern– Verwendbar für jede Java Webanwendung

• Authentifizierung über einfachen Methodenaufruf

• Security Context Holder frei konfigurierbar

• Spring wird nur zur Konfiguration benötigt

7

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Ich hab JAAS, das ist besser!?

• Wie funktioniert das nochmal gleich mit JAAS?

8

Page 5: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

JAAS Authentication

9

LDAP Login Module

Callback Handler

Fordert Eingaben

LDAP-Anmeldung

Benutzername User1

OKAbbrechen

öfnet

LDAP-Anmeldung

Kennwort ****

OKAbbrechen

öfnet

Kerberos Login Module

JAAS-Login

Callback Handler

Fordert Eingaben

Kerberos

Ticket

holt sich

LDAP Login Module

Callback Handler

Fordert Eingaben

LDAP-Anmeldung

Benutzername User1

OKAbbrechen

öfnet

LDAP-Anmeldung

Kennwort ****

OKAbbrechen

öfnet

JAAS-Login

LDAP Login Module

Callback Handler

Fordert Eingaben

LDAP-Anmeldung

Benutzername User1

OKAbbrechen

öfnet

JAAS-Login

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

JAAS Authentication

10

LoginContext lc = new LoginContext("loginConf",

new TextCallbackHandler());

lc.login();

String principal = ((Principal) lc.getSubject

().getPrincipals().iterator().next()).getName();

Page 6: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

JAAS Authentication

11

loginConf {

com.sun.security.auth.module.LdapLoginModule REQUIRED

userProvider="ldap:///cn=users,dc=example,dc=com"

authIdentity="{USERNAME}"

userFilter="(uid={USERNAME})"

};

#> java ... -Djava.security.auth.login.config=conf/

simple.conf ...

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

JAAS Authentication

12

public class MyCallbackHandler implements CallbackHandler {

private String password;

private String username;

public MyCallbackHandler(String password, String username) {

this.password = password;

this.username = username;

}

public void handle(Callback[] callbacks) throws IOException, UnsupportedCallbackException {

Callback cb;

for (int i = 0; i < callbacks.length; i++) {

cb=callbacks[i];

if (cb instanceof NameCallback) {

NameCallback nameCallback = (NameCallback) cb;

nameCallback.setName(username);

}

else if (cb instanceof PasswordCallback) {

PasswordCallback passwordCallback = (PasswordCallback) cb;

passwordCallback.setPassword(password.toCharArray());

}

else

{

throw new UnsupportedCallbackException(cb, "Only NameCallback and PasswordCallback

supported");

}

}

}

}

Page 7: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Spring Security Authentication

13

LDAP-Anmeldung

Benutzername User1

OKAbbrechen

Kennwort ****

Anwendung

öffnet

Authentication Manager

Daten

LDAP Provider Kerberos Provider

sucht aus

Kerberos

Token

erzeugt

LDAP-Anmeldung

Benutzername User1

OKAbbrechen

Kennwort ****

Anwendung

öffnet

Authentication Manager

Daten

LDAP Provider

sucht aus

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Spring Security Authentication

14

ApplicationContext ctx = new

ClassPathXmlApplicationContext

("springsecurity.xml");

AuthenticationManager manager =

(AuthenticationManager) ctx.getBean

("authManager");

Authentication auth = manager.authenticate(new

UsernamePasswordAuthenticationToken(benutzername,

passwort));

String username = auth.getName();

Page 8: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Spring Security Authentication

16

<bean id="userSearch"

class="...FilterBasedLdapUserSearch">

<constructor-arg value=""/>

<constructor-arg value="(uid={0})"/>

<constructor-arg ref="initialDirContextFactory" />

<property name="searchSubtree" value=“true“ />

</bean>

<bean id="ldapRoleFetcher"

class="...DefaultLdapAuthoritiesPopulator">

<constructor-arg ref="initialDirContextFactory" />

<constructor-arg value="ou=groups" />

<property name="groupRoleAttribute" value="cn" />

</bean>

Page 9: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Spring Security Authentication

• Auswahl des passenden Providers anhand von Eingaben und nicht umgekehrt

• Unabhängig von der Technologie/Umgebung

• Mehrere Konfigurationen in einer JVM möglich

• Keine Umgebungsvariablen nötig

• Feingranulare Authentication Provider für DAO (InMemory, JDBC), Siteminder, CAS, X509, LDAP, Testing, JAAS

17

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Aber ...

• Hoher Konfigurationsaufwand durch die Flexibilität

• Generische Konfigurationsmittel– constructur-arg, property, ...

• Schwieriger Einsteig durch die Vielzahl der Möglichkeiten

• Wenig Integration in andere Spring-Produkte

18

Page 10: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Agenda

• Spring Security?

• Konfiguration in M1

• Sonstiges in M1

• Was kommt noch

• Fazit

19

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Licht am Ende des Tunnels

• Spring Security 2.0 M1– Benötigt Spring 2.0.x+ und Java 1.4+

• Vereinfacht stark die Konfiguration– Aber noch nicht für alle Klassen

– M1 ist ein Preview für Feedback

20

Page 11: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Authentication Config

• Basic

• Form

• Anonymous

• Remember-me

• JDBC

• In-Memory

• LDAP

21

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Authorization

• Filter Security Interceptor

• Method Security Interceptor– XML basiert

– Annotation basiert

22

Page 12: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

weitere Konfigurationen

• Filter Chain Proxy

• Channel Processing Filter

• Concurrent Session Control

• (Eingebetter LDAP Server)

23

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

DEMO

Page 13: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Web Setup

• <http autoConfig=”true”>– und <intercept-url>

• <authentication-provider>– und <jdbc-user-service> oder <user-service>

• DelegatingFilterProxy in der web.xml

25

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

<http autoConfig=”true”>

• Formular Login

• Logout Handler

• Automatisch erzeugte Login-Seite

• Basic Authentication

• Remember-Me Authentication

• Anonymous Authentication

• Security Exception Übersetzung (403, ...)

• Servlet API-Integration

• Integration des Authentication Providers

26

Page 14: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

<intercept-url>

• Filter der URLs

• Zugriffsbeschränkung

• Umschaltung HTTP auf HTTPs

• Reihenfolge ist wichtig!– Erster Treffer gewinnt

– Spezifischstes Pattern am Anfang

– Catch-All am Ende

27

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

<http>

• path-type– ANT Pattern (default) oder Reguläre

Ausdrücke

• create-session– HttpSession erzeugen?

• realm – Realm für Basic und Digest Authentication

• lowercase-comparisons– URLs klein schreiben zum Vergleich

28

Page 15: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

<form-login>

• <form-login /> defaults: – Login URL: /spring_security_login

– URL bei falschem Login: /spring_security_login?login_error

– POST URL: /j_spring_security_check

• Ohne Änderung der Defaults erstellt Spring Security ein Standard Login Formular.

29

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

<logout>

• <logout /> defaults: – Logout URL ist /j_spring_security_logout

– HttpSession wird zerstört bei logout

– Weiterleitung auf Webapp-Root nach dem Logout

30

Page 16: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

<remember-me>

• <remember-me /> verwendet das Standard Cookie-Verfahren

• Durch setzen von „data-source“ wird das neue persistente Verfahren benutzt

• Auf jeden Fall „key“ setzen, um Tokens zu invalidieren!

31

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

<anonymous> defaults

• granted-authority– ROLE_ANONYMOUS

• username – anonymousUser

32

Page 17: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

<concurrent-session-control>

• Wird nicht automatisch aktiviert!

• Attribute– max-sessions

• Anzahl gleichzeitiger Sessions pro Benutzer

– expired-url• URL beim Überschreiten

– exception-if-maximum-exceeded• Exception beim Überschreiten?

33

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

<authentication-provider>

• <jdbc-user-service>– Benutzer via JDBC aus der Datenbank

• <user-service>– XML oder Properties-Datei

• <password-encoder>– MD4, MD5, SHA in Hex oder Base64

– Systemweite Salt

– Benutzerspezifische Salt

34

Page 18: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Servlet Filter Konfiguration

• DelegatingFilterProxy in web.xml– FilterToBeanProxy is deprecated in M1

• Filter implementieren Ordered Interface– FilterChainOrderUtils enthalten die Defaults

• Automatische Konfiguration der Filter durch <intercept-url>

• Manuelle Konfiguration durch <filter-chain-map>

35

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Bean IDs

• Beans werden jetzt automaitsch erzeugt, aber welche ID haben die?

• In „BeanIds“ sind alle aufgeführt

• Standard-Format:– „_“ + Name der Implementierungsklasse

– z.B. _filterChainProxy

36

Page 19: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Sind URL-Filter genug?

• URLs sind keine 1 zu 1 Beziehung zu Resourcen– Webframeworks, Filter, Druckausgaben, etc.

• URLs können sich ändern

• URL alleine reicht oft nicht (AJAX)

• Filter auf Parameter sind sehr schwierig!

37

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

<annotation-driven>

• Sucht nach Methoden mit @Secured Annotation im Application Context

• Erstellt Proxy zur Rechteprüfung um diese Beans

• Empfohlenes Vorgehen bei Java 5/6

38

Page 20: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Agenda

• Spring Security?

• Konfiguration in M2

• Sonstiges in M2

• Was kommt noch

• Fazit

39

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Neues Package

• org.acegisecurity

• org.springframework.security

40

Page 21: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Sichereres Remember-Me

• TokenBasedRememberMeServices immer noch vorhanden und weiterhin Default

• PersistentTokenBasedRememberMeServices speichert einmalige IDs in eine Datenbank – Verhindert Benutzernamen im Cookie

– Immer wieder neue IDs beim neuen Anmelden

41

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

User management API

• UserDetailsManager interface

• Enthält create, update, delete Aktionen für UserDetails Services

• Implementierungen für JDBC und (LDAP)

42

Page 22: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

REST Webservices

• Absichern von REST Webservices

• method-Attribut bei<intercept-url>– GET, POST, PUT, DELETE

43

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Weitere Verbesserungen

• MD4

• Hierarchische Rollen

• NTLM Authentifizierung

• Portlet Support

• JDK 1.4 RegEx statt ORO

• Komplettes Maven2 Build

• Project Layout

• Bug Fixes

44

Page 23: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Agenda

• Spring Security?

• Konfiguration in M2

• Sonstiges in M2

• Was kommt noch

• Fazit

45

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

2.0 Planung

• Refactoring des ACL-Modules

• Weitere Konfigurationsvereinfachungen

• JSR-250 @RolesAllowed, ...

• Spring LDAP Integration

• Dokumentation

46

Page 24: Spring Securit y 2 - jugs.org · Spring Securit y A uthentication 13 LDAP-Anmeldung Benutzername User1 Abbrechen OK Kennwort **** Anwendung ffnet Authentication Manager Daten LDAP

Copyright 2008 SpringSource. Copying, publishing or distributing without express written permission is prohibited.

Fazit

• Spring Security‘s production-proven und flexible Architektur bleibt voll erhalten

• M1/2 vereinfachte stark die Konfiguration– Plus viele (kleine) Features

• Es ist für jede Anwendung verwendbar

47