SSO单点登录,基本上是做门户系统的必备工作之一。当我们用Liferay的时候,缺省已经集成了CAS、OpenID、LDAP、NTLM、OpenSSO等单点登录的解决方案。
但
这些集成方案都有一个小问题,就是不能把用户管理跟Liferay自身的用户管理集成起来。也就是说,我们必须要另外有一个用户管理的解决方案。尽管使用
LDAP可能是更流行的解决方案,但毕竟还是增大了我们的工作量,有没有就使用Liferay自身的用户管理的SSO集成方案?
本文就是试图来解决这个问题,主要基于以下几点来实现SSO。
CAS的定制
下载的CAS Server,包括Liferay集成的CAS Server,都是只提供一个演示的登录验证,只要输入帐号和密码相同就可登录成功。
我们使用Liferay的身份认证,需要做的第一件事情就是定制这个登录实现。
实现帐号密码验证的代码
在CAS中,我们新写一个Java文件,com.liferay.sso.cas.adaptors.LiferayAuthenticationHandler,继承AbstractUsernamePasswordAuthenticationHandler。
在这个类中,使用JDBC连接Liferay的数据库,实现帐号和密码的验证。其中,帐号使用Liferay中的screenName。
由于在Liferay中,不同的Company可能会有相同的screenName,因此这种实现方法会有一些限制。最简单的做法,就是Liferay中只配置一个Company。
修改CAS配置文件
修改CAS的配置文件WEB-INF/deployerConfigContext.xml,修改<property name="authenticationHandlers">的内容。我的代码为:
<property name="authenticationHandlers">
<list>
<bean
class="org.jasig.cas.authentication.handler.support.
HttpBasedServiceCredentialsAuthenticationHandler"/>
<bean
class="com.liferay.sso.cas.adaptors.LiferayAuthenticationHandler">
<property name="dataSource" ref="liferayDbcpDataSource"/>
</bean>
</list>
</property>
当然还需要一些配置数据库的代码,自行实现即可。
经过这两步,重新启动就可以用Liferay的帐号和密码进行认证了。
Liferay的定制
作为用户的集中管理,Liferay还应该提供给客户端应用,能够很方便的得到用户的详细信息,CAS本身是不解决这个问题的。
一个比较简单的做法,就是在Liferay中实现一个Servlet,根据用户screenName,得到用户的详细信息。数据格式,为了适应不同的客户端应用,可以采用XML进行编码。
Cas客户端的定制
CAS自己提供的Client,已经能满足用户认证的功能。我们需要进一步定制的,是解决Auto Login和新用户创建的问题。这两点,需要在每个集成CAS的客户端应用中实现。
Auto Login,可以借鉴Liferay自己的一些CasAutoLogin,根据已登录的Cas用户,初始化客户端应用所需要的一些Session信息。
CAS中还有一个重要的问题,就是当CAS的用户在客户端不存在的时候,怎么解决。还有一个更严重的问题,如果客户端已经有了用户,这时候怎么实现Liferay用户同本地用户的映射?
Liferay用户同本地用户的映射问题
用户映射,根据不同的系统,或者不同的用户需求应该有不同的实现方案。
使用相同的用户名
这是比较简单的做法,直接使用相同的用户名就行。当SSO的用户在本地应用中不存在的时候,可以有两种解决方法:
这两种情况下,下次用户登录时,直接根据相同用户名进行用户映射即可。
客户端应用自己保存用户映射
如果客户端应用不修改本地用户的用户名,可以添加代码,在本地实现一个用户的映射机制。比如将SSO的user1,映射为客户端的用户user2。
当然这种实现,也需要提供一个本地的用户验证机制,实现用户的正确映射。
在Liferay中添加用户映射的机制
考虑到有很多产品需要集成,如果每个产品都去实现用户映射,工作量比较大,可以考虑到Liferay中实现一个统一的映射机制。
这种实现,也需要提供一个本地的用户验证机制,实现用户的正确映射。
这时候,需要做的工作有几部分:
-
新建一个数据表,用以保存SSO用户和各个产品的用户之间的映射机制。
-
在Liferay中定制的获取用户信息的接口中,添加用户映射的信息。这样,SSO客户端读取用户信息时,能够直接读取到用户在本地的用户名。
-
Liferay中添加一个接口,由客户端调用,用于保存用户映射信息
相关推荐
SSO单点登录,基本上是做门户系统的必备工作之一。当我们用Liferay的时候,缺省已经集成了CAS、OpenID、LDAP、NTLM、OpenSSO等单点登录的解决方案
Liferay5.2.3和CAS配置成SSO
liferay+cas实现单点登录详细步骤,照着做就可以用,我用的是liferay 6.1.x
提供了很多现成的portlet应用,支持多种方式对应用系统的集成,并且支持对CAS、LDAP、OpenID、OpenSSO等认证系统的集成,本文将以CAS作为认证中心,以Liferay的用户信息作为认证用户信息,调用Liferay中的用户密码...
liferay和cas安装部署开发流程。
liferay cas 代码
本文档详细描述了liferay 与cas 和ldap三者的集成,适合正在研究liferay的学者学习。
cas服务端自定义数据库所需jar包,集成liferay6.2源码改动
cas liferay cas与liferay结合配置 单点登录结合liferay
NULL 博文链接:https://hanchaohang.iteye.com/blog/1064360
liferay开发文档 liferay和cas整和说明文挡
CAS4.2.4 连接Liferay6.2以上版本数据库用户表验证用户 project代码
统一身份认证-CAS配置实现 SSO单点登录Spring-Security+&+CAS+使用手册 统一身份认证-CAS配置实现 CAS登录验证(密码MD5、SHA加密后_再进行Base64加密实现代码)_与Liferay的用户身份验证对应
本文对基于 LDAP 轻量目录服务、SSO 单点登录和 Liferay 框架的门户模型的架构和在信息及应用集成领域发挥的作用进行了研究和阐述,以高效的应用和信息集成和消除信息孤岛为目标,通过对该领域当前发展情况和存在问题...
LifeRay+CAS+LDAP+Tomcat 单点登录门户.pdf
Liferay Portal Liferay IDE
基于Liferay+Portal技术的校园信息门户研究与实现
CAS4.2.4 连接Liferay6.2以上版本数据库用户表验证用户
通过liferay ide 和liferay sdk 6.1实现的插件形式的portlet 集成了liferay和struts2,适合初学者