壹佰网|ERP100 - 企业信息化知识门户

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 2563|回复: 1

基于Liferay的CAS SSO实现思路

[复制链接]
发表于 2010/5/14 11:40:22 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。如果您注册时有任何问题请联系客服QQ: 83569622  。

您需要 登录 才可以下载或查看,没有帐号?注册

x
SSO单点登录,基本上是做门户系统的必备工作之一。当我们用Liferay的时候,缺省已经集成了CAS、OpenID、LDAP、NTLM、OpenSSO等单点登录的解决方案。
但这些集成方案都有一个小问题,就是不能把用户管理跟Liferay自身的用户管理集成起来。也就是说,我们必须要另外有一个用户管理的解决方案。尽管使用LDAP可能是更流行的解决方案,但毕竟还是增大了我们的工作量,有没有就使用Liferay自身的用户管理的SSO集成方案?
本文就是试图来解决这个问题,主要基于以下几点来实现SSO。

    使用Liferay的用户注册、管理作为统一用户的基础。
    使用CAS作为单点登录的服务器端和客户端实现。
    对Liferay做必要的定制,满足SSO客户端产品的要求
    CAS的定制
    下载的CAS Server,包括Liferay集成的CAS Server,都是只提供一个演示的登录验证,只要输入帐号和密码相同就可登录成功。
    我们使用Liferay的身份认证,需要做的第一件事情就是定制这个登录实现。
    实现帐号密码验证的代码
    在CAS中,我们新写一个Java文件,com.liferay.sso.cas.adaptors.LiferayAuthenticationHandler,继承AbstractUsernamePasswordAuthenticationHandler。
    在这个类中,使用JDBC连接Liferay的数据库,实现帐号和密码的验证。其中,帐号使用Liferay中的screenName。
    修改CAS配置文件
    修改CAS的配置文件WEB-INF/deployerConfigContext.xml,修改<property name="authenticationHandlers">的内容。我的代码为:
    <property name="authenticationHandlers"><list><beanclass="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相同的用户名。如果在本地还没有账户,可以直接使用第二种方案创建新用户。
    • 直接创建新的本地用户:调用Liferay的获取用户的接口,获取用户的详细信息,然后直接调用本地注册新用户的代码,创建一个本地新用户。

    这两种情况下,下次用户登录时,直接根据相同用户名进行用户映射即可。
    客户端应用自己保存用户映射
    如果客户端应用不修改本地用户的用户名,可以添加代码,在本地实现一个用户的映射机制。比如将SSO的user1,映射为客户端的用户user2。
    当然这种实现,也需要提供一个本地的用户验证机制,实现用户的正确映射。
    在Liferay中添加用户映射的机制
    考虑到有很多产品需要集成,如果每个产品都去实现用户映射,工作量比较大,可以考虑到Liferay中实现一个统一的映射机制。
    这种实现,也需要提供一个本地的用户验证机制,实现用户的正确映射。
    这时候,需要做的工作有几部分:

      新建一个数据表,用以保存SSO用户和各个产品的用户之间的映射机制。
    • 在Liferay中定制的获取用户信息的接口中,添加用户映射的信息。这样,SSO客户端读取用户信息时,能够直接读取到用户在本地的用户名。
    • Liferay中添加一个接口,由客户端调用,用于保存用户映射信息


 楼主| 发表于 2010/6/7 14:43:52 | 显示全部楼层
遨豪一直专注于Liferay门户本地化服务,致力于为中国用户提供最佳的Liferay门户解决方案,其主要服务包括:
1. Liferay门户二次开发服务(基于客户需求)
2. Liferay门户技术支持服务 (现场+远程)
3. Liferay门户定制培训服务 (现场+远程)
4. Liferay门户企业版服务  (提供liferay企业版+专业技术支持)
------------------------------------------------------------
遨豪(大连)科技有限公司
Liferay 中国合作伙伴
-------------------------------------
市场部: Mr.Luo
-------------------------------------
电话:411-8405-2127
传真:411-8489-8263
MSN: liferayjw@hotmail.com
QQ:  1209462980
email:jiajia6f@163.com
-------------------------------------
地址:大连高新技术产业园区
-------------------------------------

QQ|Archiver|小黑屋|手机版|壹佰网 ERP100 ( 京ICP备19053597号-2 )

Copyright © 2005-2012 北京海之大网络技术有限责任公司 服务器托管由互联互通
手机:13911575376
网站技术点击发送消息给对方83569622   广告&合作 点击发送消息给对方27675401   点击发送消息给对方634043306   咨询及人才点击发送消息给对方138011526

GMT+8, 2025/11/30 02:33 , Processed in 0.011252 second(s), 15 queries , File On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表