This documentation relates to Crowd 2.4.
If you are using an earlier version, please view the previous versions of the Crowd documentation and select the relevant version.
Skip to end of metadata
Go to start of metadata

Crowd provides centralised authentication and single sign-on connectors for the web security framework Spring Security. Spring Security provides a modular and highly configurable approach to authentication and authorisation for J2EE applications.

If your web application already makes use of the Spring Security framework for authentication and authorisation, you can use the Crowd Spring Security connector to allow your application to easily delegate authentication and authorisation requests to Crowd.

Spring, Acegi and Crowd versions

Spring Security was formerly known as Acegi. There is a separate tutorial for integrating Acegi with Crowd.The connector is available with Crowd 1.6 and later and has been developed and tested with Spring Security 2.0.4. We have not yet developed a tutorial for use with Spring 3.x. If you are interested, please watch and/or vote for CWD-1807.

Please consult the Spring Security suggested steps or reference guide for a thorough insight into the Spring Security framework. You might also find useful information in our Appfuse integration tutorial.

This guide assumes developer-level knowledge and a Spring Security-based web application

This guide is for developers rather than administrators. This guide assumes you have Crowd 1.6 or later installed and that you want to integrate your Spring Security-based web application with Crowd's security server. The documentation below describes how to integrate Crowd with your own application that uses the Spring Security framework. It assumes you already use Spring Security in your application. If you need help integrating the Spring Security framework with your web application, have look at some of the Spring Security documentation.

Prerequisites

  1. Download and configure Crowd. Refer to the Crowd Installation Guide for detailed information on how to do this. We will refer to the Crowd root folder as CROWD.
  2. Have your Spring Security-based custom application ready for tweaking. We will refer to your custom application as 'SpringSecApp'.

Step 1. Configuring Crowd to Talk to your Spring Security Application

Crowd needs to be aware that SpringSecApp will be making authentication requests to Crowd. In brief, you will need to do the following:

  1. Add the SpringSecApp application to Crowd.
  2. Add and configure the directories visible to SpringSecApp.
  3. Add and map the groups which are allowed to authenticate with SpringSecApp.

Please see Adding an Application for a detailed guide.

Step 2. Installing the Crowd Spring Security Connector

2.1 Adding the Crowd Spring Security Connector to your Spring Security Application

You will need to add the Crowd Spring Security connector library and its associated dependencies to your Spring Security application. You can do this manually by copying over the JAR files to your Spring Security application or, if your Spring Security application is a Maven project, you can add the Crowd Spring Security connector as a project dependency. Both methods are described below.

2.1.1 Manually Adding the Crowd Spring Security Connector Libraries

(info) Follow either 2.1.1 or 2.1.2 (not both).

Copy the Crowd integration libraries and configuration files. This is described in the Client Configuration documentation. You will need to copy at least the following file to your Spring Security application:

Copy From

Copy To

CROWD/client/crowd-integration-client-X.X.X.jar

SpringSecApp/WEB-INF/lib

CROWD/client/lib/*.jar

SpringSecApp/WEB-INF/lib

2.1.2 Adding the Crowd Spring Security Connector as a Maven Dependency

(info) Follow either 2.1.1 or 2.1.2 (not both).

The page Maven 2 integration does not exist.

See more information on Maven 2 integration.

2.2 Adding the Cache Configuration File

Copy the following file into your application's classpath:

Copy From

Copy To

CROWD/client/conf/crowd-ehcache.xml

SpringSecApp/WEB-INF/classes/crowd-ehcache.xml

This file can be tweaked to change the cache behaviour.

2.3 Configuring the Crowd Spring Security Connector Properties

The Crowd Spring Security connector needs to be configured with the details of the Crowd server.

  1. Copy the default crowd.properties file to the classpath of your Spring Security application:

    Copy From

    Copy To

    CROWD/client/conf/crowd.properties

    SpringSecApp/WEB-INF/classes

  2. Edit the crowd.properties and populate the following fields appropriately:

    Key

    Value

    application.name

    Same as application name defined when adding the application to Crowd in Step 1.

    application.password

    Same as application password defined when adding the application to Crowd in Step 1.

    crowd.server.url

    http://localhost:8095/crowd/services/

    session.validationinterval

    This is the time interval between requests which validate whether the user is logged in or out of the Crowd SSO server. Set to 0, if you want authentication checks to occur on each request. Otherwise set to the number of minutes you wish to wait between requests. Setting this value to 1 or higher will increase the performance of Crowd's integration.

You can read more about the crowd.properties file.

Step 3. Configuring your Spring Security Application to Use the Crowd Spring Security Connector

There are two ways you can integrate your application with Crowd:

  • Centralised user management: The user repository available to your application will be the user repository allocated to your application via Crowd. This means that your application will use the centralised user repository for retrieving user details as well as performing authentication.
  • Single sign-on: In addition to centralised authentication, SSO will be available to your application. If any other SSO-enabled applications (such as JIRA, Confluence, or your own custom applications) are integrated with Crowd, then SSO behaviour will be established across these applications. If you sign in to one application, you are signed in to all applications. If you sign out of one application, you are signed out of all applications.

First, you will need to add the Crowd client application context to wire up the Crowd beans that manage the communication to Crowd. You can do this by including the applicationContext-CrowdClient.xml Spring configuration file, found in crowd-integration-client.jar. For example, if you are configuring Spring using a context listener, you can add the following parameter in your your Spring Security application's WEB-INF/web.xml:

3.1 Configuring Centralised User Management

The following sections assume that you have the Spring Security schema mapped to the security namespace. Perform the following updates to your Spring Security configuration:

  1. Add the definition of the CrowdUserDetailsService:
  2. Add the definition of the RemoteCrowdAuthenticationProvider:
Further extensions
  • If you have an existing user data model, then you can extend or wrap the CrowdDetailsService to cater for user objects within your application domain.
  • If you require users within Crowd to be created in your application's persistence model so that you can store application-specific user data, you can extend the CrowdAuthenticationProvider to create records for successfully authenticated Crowd users.
Crowd's remote API

We recommend that applications do not store the Crowd users locally. Rather, applications should query users via Crowd's remote API.

3.2 Configuring Single Sign-On (SSO)
SSO is optional and requires centralised user management

Single sign-on is optional. If you wish to configure SSO you must first configure centralised user management as described in step 3.1 above.

Perform the following additional updates to your Spring Security configuration:

  1. Remove defaults from the <http/> element:
    1. Remove the auto-config attribute and add an entry-point-ref="crowdAuthenticationProcessingFilterEntryPoint" attribute to the http element.
    2. Remove the <form-login> element.
      You should end up with a http element similar to this:
  2. Change the default processing filter to Crowd's SSO filter by adding the following bean definitions:
  3. Add the definition of the CrowdLogoutHandler and add in a LogoutFilter that references it:

Step 4. Restarting your Spring Security Application

Bounce your application. You should now have centralised authentication and single sign-on with Crowd.

Authorisation

For the purposes of Crowd integration with Spring Security, you should map Spring Security's roles to Crowd's groups. To put it another way: in order to use Spring Security's authorisation features, users in Crowd will have their Spring Security roles specified by their group names.

For example if user 'admin' is in the 'crowd-admin' group, then the user 'admin' will be authorised to view pages restricted to the 'crowd-admin' role in Spring Security.

RELATED TOPICS

Crowd Documentation

  1. Feb 22, 2010

    Anonymous

    Any Chance of a Spring Security 3 compatible version of this? My guess is you would only need to adjust the package names for some Spring Security classes that moved around. Thanks!!

    1. Feb 22, 2010

      Hallo there

      We have not yet developed a tutorial for use with Spring 3.x. If you are interested, please watch and/or vote for CWD-1807.

      I've added a note to the page about this too. Thanks for pointing it out. (smile)

      Cheers
      Sarah

  2. Feb 24, 2010

    Dont think its enough to change the tutorial. Since Spring Security 3.0 re factored their package structure, the atlasian classes need to recompile and adjust for the change. Even maybe a separate package for 3.0 integration might be necessary. Btw. any chance to get the source code of that client? Shouldn't be to hard to adapt it to the changes in spring security 3.0.

  3. Sep 15, 2010

    Anonymous

    I am facing a problem in authentication using crowd2.0.7 with spring2.x. please provide inputs..

    I have been keeping on posting the same in lot of forums but no one is replying..

    Please go through the forum post atĀ http://forum.springsource.org/showthread.php?t=95180&page=1 and provide inputs...

  4. Feb 21, 2011

    Anonymous

    hi

    anyone did an spring-security/crowd integration into a grails app?

    thanks

  5. Aug 22, 2011

    I am trying to run the example with Spring Security 3.0.1 RELEASE version of Maven and SpringĀ 

    2.5.6.SEC02 but it says the Spring version is not compatible.

    Has anyone tried the right combination of these two?

  6. Dec 23, 2011

    Anonymous

    I had a dream to start my own organization, but I did not have got enough amount of cash to do that. Thank goodness my friend proposed to take the personal loans. So I used the student loan and realized my old dream.