SSO : CAS & LDAP pour Liferay + Alfresco
From www.side-labs.org
Contents |
Choix
Afin de pouvoir se connecter à la fois sur Alfresco & Liferay (ou d'autres applications) un système de SSO doit être mis en place. Pour cela l'adoption de CAS couplé avec LDAP semble approprier, LDAP est utilisable sur Alfresco & Liferay et les deux plateformes cibles ont également une implémentation de CAS.
D'autres système de SSO existe comme OpenId mais ne sont pas forcément aussi répondu que CAS.
Configuration générale
Se placer dans son répertoire personnel (ou l'endroit où est stocké votre fichier .keystore).
keytool -genkey -alias tomcat -keyalg RSA
Pour nom/prénom rentrer "localhost" ou le nom de votre serveur, rien pour les autres (le mot de passe par défaut est "changeit") sauf si vous êtes dans un réseau. Ensuite :
keytool -export -alias tomcat -keypass changeit -file server.cert
Puis :
keytool -import -alias tomcat -file server.cert -keypass changeit -keystore %JAVA_HOME%/jre/lib/security/cacerts
Configuration de CAS
- Configurer Tomcat pour supporter le SSL. Aide
Décommenter (ou ajouter) ce connecteur dans le fichier server.xml :
<Connector port="8443" maxHttpHeaderSize="8192" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" disableUploadTimeout="true" acceptCount="100" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" />
- Récupérer le CAS server ici. Prendre le war et le mettre dans le répertoire webapp de liferay (lorsque celui ci est démarré)
- Une fois le serveur cas déployé aller dans webapp/cas/WEB-INF/
- Dans le fichier deployerConfigContext.xml ajouter cette définition de bean (en y mettant les valeurs de votre LDAP)
<bean id="serviceRegistryDao" class="org.jasig.cas.services.InMemoryServiceRegistryDaoImpl" />
<bean id="contextSource" class="org.jasig.cas.adaptors.ldap.util.AuthenticatedLdapContextSource">
<property name="pooled" value="true"/>
<property name="urls">
<list>
<value>ldap://localhost:389</value>
</list>
</property>
<property name="userName" value="cn=Manager,dc=blueXml,dc=com"/>
<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>
- Supprimer le simpleAuthenticationHandler et le remplacer par :
<bean class="org.jasig.cas.adaptors.ldap.FastBindLdapAuthenticationHandler" > <property name="filter" value="cn=%u,ou=users,dc=blueXml,dc=com" /> <property name="contextSource" ref="contextSource" /> </bean>
- Redémarrer liferay. Vous pouvez accéder à CAS via http://localhost:8080/cas/ si vous avez déployer un war nommé cas.war
Configuration de Liferay
LDAP
- La modification peut être faites dans la portlet Admin (Setting > Authentication > CAS)
Exemple :
Avec les version 4.4 il est possible de configurer cela directement en ligne : exemple. Autrement un tutoriel est présent sur le wiki de Liferay : [1]
CAS
- La modification peut être faites dans la portlet Admin (Setting > Authentication > CAS)
- Chercher le fichier "portal-ext.properties" et modifier la valeur de cette ligne :
auto.login.hooks=com.liferay.portal.auth.BasicAutoLogin,com.liferay.portal.auth.CASAutoLogin
- Placer le CAS.war dans le répertoire de déploiement de liferay
- Placer le fichier casclient.jar dans le dossier lib de liferay (ROOT/web-inf/lib). A télécharger ici.
- Pour Liferay 4.2, modifier le fichier system-ext.properties pour y mettre :
com.liferay.filters.sso.cas.CASFilter=true
- Editer le fichier web.xml pour y ajouter un filtre (à modifier avec les bonnes adresses) :
<filter>
<filter-name>CAS Filter</filter-name>
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<param-value>https://192.168.24.101:8443/cas/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://192.168.24.101:8443/cas/proxyValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.logout</param-name>
<param-value>https://192.168.24.101:8443/cas/logout</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>192.168.24.101</param-value>
</init-param>
</filter>
<filter-mapping>
<filter-name>CAS Filter</filter-name>
<url-pattern>/c/portal/protected/*</url-pattern>
</filter-mapping>
Une aide sur le wiki de liferay est disponible (et est détaillé) : Single SignOn - Integrating Liferay With CAS Server ou ici (4.3+)
Installation d'Alfresco dans Liferay
Attention aux versions utilisées. Un tutoriel compley existe sur le wiki d'Alfresco pour la version 2.1 d'Alfresco et la 4.3 de Liferay. Ces deux versions fonctionnent. En 2.9b impossible à installer mais sur le forum d'Alfresco certains indiquent qu'ils y sont arrivé.
Cependant il existe un bug Alfresco 2.9b empêchant la connexion de Liferay dans Alfresco. Pour le corriger utiliser ce fichier.
Configuration d'Alfresco
Tutoriel ici
LDAP
TODO
CAS
Remplacer dans le fichier web.xml les balises <filter> et <filter-mapping>. Pensez à changer les param-value pour y mettre la location de votre serveur CAS.
<filter>
<filter-name>Authentication Filter</filter-name>
<filter-class>edu.yale.its.tp.cas.client.filter.CASFilter</filter-class>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.loginUrl</param-name>
<param-value>https://localhost:8443/cas-server-webapp-3.3/login</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.validateUrl</param-name>
<param-value>https://localhost:8443/cas-server-webapp-3.3/serviceValidate</param-value>
</init-param>
<init-param>
<param-name>edu.yale.its.tp.cas.client.filter.serverName</param-name>
<param-value>localhost:8080</param-value>
</init-param>
</filter>
<filter>
<filter-name>CAS Authentication</filter-name>
<filter-class>com.bluexml.common.cas.CasAuthenticationFilter</filter-class>
</filter>
<filter>
<filter-name>WebDAV Authentication Filter</filter-name>
<filter-class>org.alfresco.repo.webdav.auth.AuthenticationFilter</filter-class>
</filter>
<filter>
<filter-name>Admin Authentication Filter</filter-name>
<filter-class>org.alfresco.web.app.servlet.AdminAuthenticationFilter</filter-class>
</filter>
<filter-mapping>
<filter-name>Authentication Filter</filter-name>
<url-pattern>/faces/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Authentication</filter-name>
<url-pattern>/faces/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Authentication Filter</filter-name>
<url-pattern>/service/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Authentication</filter-name>
<url-pattern>/service/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Authentication Filter</filter-name>
<url-pattern>/navigate/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Authentication</filter-name>
<url-pattern>/navigate/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Authentication Filter</filter-name>
<url-pattern>/command/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Authentication</filter-name>
<url-pattern>/command/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Authentication Filter</filter-name>
<url-pattern>/template/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Authentication</filter-name>
<url-pattern>/template/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Authentication Filter</filter-name>
<url-pattern>/download/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>CAS Authentication</filter-name>
<url-pattern>/download/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>WebDAV Authentication Filter</filter-name>
<url-pattern>/webdav/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Admin Authentication Filter</filter-name>
<url-pattern>/faces/jsp/admin/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Admin Authentication Filter</filter-name>
<url-pattern>/faces/jsp/categories/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Admin Authentication Filter</filter-name>
<url-pattern>/faces/jsp/groups/*</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Admin Authentication Filter</filter-name>
<url-pattern>/faces/jsp/users/delete-user.jsp</url-pattern>
</filter-mapping>
http://wiki.bluexml.com/index.php?title=SSO_:_CAS_%26_LDAP_pour_Liferay_%2B_Alfresco&action=submit
<filter-mapping>
<filter-name>Admin Authentication Filter</filter-name>
<url-pattern>/faces/jsp/users/users.jsp</url-pattern>
</filter-mapping>
<filter-mapping>
<filter-name>Admin Authentication Filter</filter-name>
<url-pattern>/faces/jsp/dialog/system-info.jsp</url-pattern>
</filter-mapping>
Copier ces deux classes java :
CasAuthenticationFilter.java
BaseServlet.java
Faites en un .jar que vous placer dans le répretoire alfresco/WEB-INF/lib/
(ces classes compilées sont également dispo dans le module_all.zip).
Ajouter le fichier cas-context.xml ci dessous dans tomcat/shared/classes/alfresco/extension/
<?xml version='1.0' encoding='UTF-8'?> <!DOCTYPE beans PUBLIC '-//SPRING//DTD BEAN//EN' 'http://www.springframework.org/dtd/spring-beans.dtd'> <beans> <bean id="authenticationComponent" class="org.alfresco.repo.security.authentication.SimpleAcceptOrRejectAllAuthenticationComponentImpl"> <property name="accept"> <value>true</value> </property> </bean> </beans>
