This page is designed to show how to integrate Roller 4.0 with LDAP and JA-SIG Central Authentication Service. To begin, you will need to download the following:
- Apache Directory Server 1.5.1
- Apache Directory Studio 1.0.1
- Apache Roller 4.0
- Apache Tomcat 6.0.14
- CAS 3.1
- Yale Java Client 2.1.1
These instructions should work on any application server, providing you're able to install Roller.
Install Roller and Test
The first step is to install Roller and ensure it works on your application server.
- Install Tomcat 6 and create a CATALINA_HOME environment variable that points to the installation location.
- Create a roller-custom.properties file and put it in your server's classpath ($CATALINA_HOME/lib for Tomcat 6).
installation.type=auto database.configurationType=jdbc database.jdbc.driverClass=com.mysql.jdbc.Driver database.jdbc.connectionURL=jdbc:mysql://localhost:3306/rollerdb?createDatabaseIfNotExist=true database.jdbc.username=root database.jdbc.password= mail.configurationType=properties mail.hostName=localhost
- Download the following JARs and copy them to apache-roller-4.0/webapps/roller/WEB-INF/lib:
- MySQL JDBC Driver
- JavaMail: activation.jar and mail.jar
- Copy apache-roller-4.0/webapps/roller to $CATALINA_HOME/webapps/roller and start Tomcat.
- Go to http://localhost:8080/roller
and complete the steps to add a new user and create a blog. When creating a new user, use admin for the username and admin for the password.
- Test that Roller works by creating a blog entry using the web interface, or using a client like MarsEdit (Moveable Type, RPC URL: http://localhost:8080/roller/roller-services/xmlrpc
, Blog ID: admin).
Install LDAP and Test
Now that you have Roller installed and working, configure it to authenticate against LDAP instead of the "rollerdb" database.
- Stop Tomcat.
- Install Apache Directory Server and start it as root by running "sudo /usr/local/apacheds" (on OS X).
- Install Apache Directory Studio and launch the application.
- Create a new LDAP Connection with the following settings:
- Connection Name: Local ApacheDS
- Hostname: localhost
- Port: 10389
- Encryption: No Encryption
- (Click Next)
- Bind DN or user: uid=admin,ou=system
- Bind password: secret
- (Click Finish)
- Download roller.ldif to your Desktop. This file contains an admin account as well as Groups and People organizational units.
- In Apache Directory Studio, right click on dc=example,dc=com and select Import > LDIF Import...
- Select roller.ldif for the LDIF file and click Finish. You may get an error during the import, but it should add entries successfully.
- Modify $CATALINA_HOME/lib/roller-custom.properties so it has a single entry:
users.sso.enabled=true
- Open $CATALINA_HOME/webapps/roller/WEB-INF/security.xml in your favorite XML editor. Look for "LDAP/SSO" and uncomment the bean definitions to enable LDAP. In the "authenticationManager" bean, comment out "daoAuthenticationProvider" and enable "ldapAuthProvider". Commenting out "daoAuthenticationProvider" is not necessary, but it allows you to verify you're only authenticating against LDAP. Use the following values for the values in the "initialDirContextFactory" bean.
- LDAP_URL = ldap://localhost:10389/dc=example,dc=com
- LDAP_USERNAME = uid=admin,ou=system
- LDAP_PASSWORD = secret
- While you're editing security.xml, change the "rollerlovesacegi" value to something unique to your server. Any XML-friendly characters will work. The more cryptic the better.
- Start Tomcat and login to your blog with admin/adminldap.
These instructions have been tested and verified against OpenDS as well. The main differences are the LDAP settings. The default settings for OpenDS are:
- LDAP_URL = ldap://localhost:1389/dc=example,dc=com
- LDAP_USERNAME = cn=Directory Manager
- LDAP_PASSWORD = password
Install CAS and Test
- Install CAS by copying its modules/cas.war to $CATALINA_HOME/webapps.
- Navigate to http://localhost:8080/cas
and login with admin/admin.
- Configure Roller to talk to CAS by making the following modifications to security.xml:
- In the filterChainProxy bean definition, replace "authenticationProcessingFilter,rememberMeProcessingFilter" with "casProcessingFilter".
- In the authenticationManager bean, comment out the "ldapAuthProvider" and add <ref local="casAuthenticationProvider"/>.
- Change the exceptionTranslationFilter to use "casProcessingFilterEntryPoint" for its "authenticationEntryPoint".
- Look for the "CAS" beans near the bottom of the file) and uncomment the bean definitions to enable CAS integration.
- Copy casclient.jar from the cas-client-java-2.1.1/dist directory to $CATALINA_HOME/webapps/roller/WEB-INF/lib.
- Modify $CATALINA_HOME/conf/server.xml to enable https support. Below is an example.
<Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true" maxThreads="150" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" keystoreFile="/Users/mraible/.keystore" keystorePass="changeit" truststoreFile="/System/Library/Frameworks/JavaVM.framework/Home/lib/security/cacerts"/>
- Use the CAS SSL Guide to generate, export and import a certificate.
- At this point, you should be able to start Tomcat and login to your blog. The login page should be from CAS rather than Roller and admin/admin should log you in successfully.
Integrate CAS with Roller's Database
By default CAS ships with a SimpleTestUsernamePasswordAuthenticationHandler that has a hard-coded username and password. To change this to authenticate against Roller's database, complete the following steps:
- Edit $CATALINA_HOME/webapps/cas/WEB-INF/deployerConfigContext.xml in your favorite XML editor.
- Find the SimpleTestUsernamePasswordAuthenticationHandler bean towards the bottom and comment it out. Replace it with the following:
<bean class="org.jasig.cas.adaptors.jdbc.SearchModeSearchDatabaseAuthenticationHandler"> <property name="tableUsers" value="rolleruser"/> <property name="fieldUser" value="username"/> <property name="fieldPassword" value="passphrase"/> <property name="dataSource" ref="dataSource"/> </bean>
- At the very end of the file (before the ending </beans> element), add a "dataSource" bean definition:
<bean id="dataSource" class="org.apache.commons.dbcp.BasicDataSource" destroy-method="close"> <property name="driverClassName" value="com.mysql.jdbc.Driver"/> <property name="url" value="jdbc:mysql://localhost:3306/rollerdb"/> <property name="username" value="root"/> <property name="password" value=""/> <property name="maxActive" value="100"/> <property name="maxWait" value="1000"/> <property name="poolPreparedStatements" value="true"/> <property name="defaultAutoCommit" value="true"/> </bean>
- Download the following JARs and put them into $CATALINA_HOME/webapps/cas/WEB-INF/lib.
- Copy cas-server-support-jdbc-3.1.jar from $CAS_DOWNLOAD/modules to $CATALINA_HOME/webapps/cas/WEB-INF/lib.
- Modify the password in the "rollerdb" database so the "admin" user's password is in plain text.
- Start Tomcat. You should be able to login with the password you set in the previous step.
Integrate CAS with Apache Directory Server
By default CAS ships with a SimpleTestUsernamePasswordAuthenticationHandler that has a hard-coded username and password. To change this to authenticate against your previously installed Apache Directory Server, complete the following steps:
- Edit $CATALINA_HOME/webapps/cas/WEB-INF/deployerConfigContext.xml in your favorite XML editor.
- Find the SimpleTestUsernamePasswordAuthenticationHandler bean towards the bottom and comment it out. Replace it with the following:
<bean class="org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler" > <property name="filter" value="uid=%u,ou=People,dc=example,dc=com" /> <property name="contextSource" ref="contextSource" /> </bean>
- At the very end of the file (before the ending </beans> element), add a "contextSource" bean definition:
<bean id="contextSource" class="org.jasig.cas.adaptors.ldap.util.AuthenticatedLdapContextSource"> <property name="pooled" value="true"/> <property name="urls"> <list> <value>ldap://localhost:10389</value> </list> </property> <property name="userName" value="uid=admin,ou=system"/> <property name="password" value="secret"/> <property name="baseEnvironmentProperties"> <map> <entry> <key> <value>java.naming.security.authentication</value> </key> <value>simple</value> </entry> </map> </property> </bean>
- Copy cas-server-support-ldap-3.1.jar from $CAS_DOWNLOAD/modules to $CATALINA_HOME/webapps/cas/WEB-INF/lib.
- Start Tomcat. You should be able to login with admin/adminldap.