23
1 Sunday, July 7, 13

Securing Applications With Picketlink

Embed Size (px)

DESCRIPTION

Anil Saldhana and Pete Muir presented securing applications with PicketLink at Red Hat Summit 2013. For more information, please refer to http://www.picketlink.org and JDF. TicketMonster is a Java EE app with HTML5 (http://www.jboss.org/jdf/examples/ticket-monster/tutorial/WhatIsTicketMonster/). This presentation talked about securing TicketMonster using PicketLink.

Citation preview

Page 1: Securing Applications With Picketlink

1

Sunday, July 7, 13

Page 2: Securing Applications With Picketlink

SECURING APPLICATIONS WITH PICKETLINK

Anil Saldhana, Red HatPete Muir, Red HatJune 2013

2

Sunday, July 7, 13

Page 3: Securing Applications With Picketlink

What is it?

Security framework for Java EE● Apache License V2● First class support for CDI● Secures your beans, bean methods, view layer,

RESTful endpoints, servlets and more● Simple API for managing Users, Groups and Roles● Authenticate any way you want● Federation (SAML, WS-Trust, OpenID)

3

Sunday, July 7, 13

Page 4: Securing Applications With Picketlink

Overview

4

Sunday, July 7, 13

Page 5: Securing Applications With Picketlink

Identity Management

Manage users, groups, roles and more● Built in support for storing your identities in:

● File system● A relational database (using JPA)● LDAP

● Well defined SPI for creating custom identity stores● Powerful query API for querying identities● All operations done through IdentityManager,

which can be simply @Injected into your beans

5

Sunday, July 7, 13

Page 6: Securing Applications With Picketlink

BYO Identity Model

● We provide you with optional User, Group, Role classes

● We also provide a few default relationships – group membership, group role and application role

● But custom relationships (between two or more participating identities) are also easy to define

● Provides the flexibility you need to meet the requirements of your business or project

6

Sunday, July 7, 13

Page 7: Securing Applications With Picketlink

Authentication

Authentication is initiated with Identity.login()● Identity bean is a session-scoped bean that tracks

the current user

Authenticator can be configured per application or per request

● Supports multiple authentication methods in a single application (e.g. Username/password and OpenID)

● We provide some default (optional) support for some credential types

7

Sunday, July 7, 13

Page 8: Securing Applications With Picketlink

8

Sunday, July 7, 13

Page 9: Securing Applications With Picketlink

9

Sunday, July 7, 13

Page 10: Securing Applications With Picketlink

10

Sunday, July 7, 13

Page 11: Securing Applications With Picketlink

RESTful Authentication Endpoint

org.jboss.jdf.example.ticketmonster.security.rest.LoginService

● Username/password passed in via the credential param● Identity.login() invoked

● If authentication successful, the User object is read from the Identity bean and passed back in the REST response

● We haven't configured an Authenticator for this application, so by default Identity Management is used to authenticate

11

Sunday, July 7, 13

Page 12: Securing Applications With Picketlink

Where are our users defined?

org.jboss.jdf.example.ticketmonster.security.IdentityManagementInitializer● @Startup bean is instantiated during app startup

● IdentityManager is @Injected

● initialize() is a @PostConstruct method● Is executed automatically● Creates the users, roles and default passwords for our

application● Sensible IDM configuration defaults make this possible

12

Sunday, July 7, 13

Page 13: Securing Applications With Picketlink

Securing application methods

org.jboss.jdf.example.ticketmonster.rest.BookingService● We want to restrict the createBooking() method to

only logged-in users● @UserLoggedIn is a Security Binding Type, an

annotation used to restrict access to beans and bean methods

● This feature is provided by Apache DeltaSpike● A Security Binding Type requires an Authorizer method,

annotated with @Secures in addition to the binding annotation

13

Sunday, July 7, 13

Page 14: Securing Applications With Picketlink

Implementing the Authorizer method

org.jboss.jdf.example.ticketmonster.security.AuthorizationManager● The isUserLoggedIn() method controls access to

methods annotated with @UserLoggedIn● Is annotated with both @Secures and @UserLoggedIn● Parameters of an authorizer method are treated as

injection points● Must return a boolean to indicate whether the

authorization was successful – a result of true means the restricted method may be invoked by the current user

14

Sunday, July 7, 13

Page 15: Securing Applications With Picketlink

Servlet security

org.jboss.jdf.example.ticketmonster.security.RoleBasedAuthorizationFilter● Standard servlet filter, active for all requests

● Delegates authorization check to AuthorizationManager.isAllowed()

● Only allows requests to /admin/* URLs if user has the Administrator role

● IdentityManager.hasRole() method used to check if the current user has the required role

15

Sunday, July 7, 13

Page 16: Securing Applications With Picketlink

View layer security

We can also tailor the user experience based on the current user's privileges

● JSF <ui:fragment> control can be used to show or hide parts of the page based on roles

● Can access the Identity bean directly via EL, e.g. #{identity.loggedIn}

● Can also use application-specific checks, e.g. AuthorizationManager.isAdmin()

16

Sunday, July 7, 13

Page 17: Securing Applications With Picketlink

User Registration

IDM makes it easy to implement user self-registration● org.jboss.jdf.example.ticketmonster.security.rest.RegistrationService

● The register() method receives a user registration request

● The performRegistration() method creates a new User, assigns them the User role, and adds them to the Users group.

● The registering user is even automatically logged in by the performSilentAuthentication() method

● An alternative would be to send a confirmation e-mail

17

Sunday, July 7, 13

Page 18: Securing Applications With Picketlink

Other IDM Features

Built-in authentication support for● Form-based, BASIC, DIGEST, X509 Certificate,

Username/PasswordPassword encoding● Defaults to a salted hash, or BYOMix and match identity stores● Store your users in LDAP, roles and groups in DB

18

Sunday, July 7, 13

Page 19: Securing Applications With Picketlink

Other Features of PicketLink

PicketLink Federation (SSO and Trust)● SAML 2.0● SAML 1.1● WS-Trust 1.3

19

Sunday, July 7, 13

Page 20: Securing Applications With Picketlink

Other Features of PicketLink

PicketLink Social Login● Login using Facebook● Login using Twitter● Login using Google● Login using OpenID

20

Sunday, July 7, 13

Page 21: Securing Applications With Picketlink

PicketLink RoadMap

PicketLink v2.5.0 is the target● Currently in frequent beta releases (Last Beta4)● CR cycles to start soon● Current emphasis on QE, Quickstarts and Demos● Final planned mid-july (+ or - 2 weeks)

21

Sunday, July 7, 13

Page 22: Securing Applications With Picketlink

PicketLink Resources

PicketLink has an one stop resource● http://www.picketlink.org● JDF Quickstarts

22

Sunday, July 7, 13

Page 23: Securing Applications With Picketlink

Questions?

23

Sunday, July 7, 13