`
阅读更多

 

基于Liferay的CAS SSO实现思路

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。

由于在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相同的用户名。如果在本地还没有账户,可以直接使用第二种方案创建新用户。

  • 直接创建新的本地用户:调用Liferay的获取用户的接口,获取用户的详细信息,然后直接调用本地注册新用户的代码,创建一个本地新用户。

这两种情况下,下次用户登录时,直接根据相同用户名进行用户映射即可。

客户端应用自己保存用户映射

如果客户端应用不修改本地用户的用户名,可以添加代码,在本地实现一个用户的映射机制。比如将SSO的user1,映射为客户端的用户user2。

当然这种实现,也需要提供一个本地的用户验证机制,实现用户的正确映射。

在Liferay中添加用户映射的机制

考虑到有很多产品需要集成,如果每个产品都去实现用户映射,工作量比较大,可以考虑到Liferay中实现一个统一的映射机制。

这种实现,也需要提供一个本地的用户验证机制,实现用户的正确映射。

这时候,需要做的工作有几部分:

  • 新建一个数据表,用以保存SSO用户和各个产品的用户之间的映射机制。

  • 在Liferay中定制的获取用户信息的接口中,添加用户映射的信息。这样,SSO客户端读取用户信息时,能够直接读取到用户在本地的用户名。

  • Liferay中添加一个接口,由客户端调用,用于保存用户映射信息。

分享到:
评论

相关推荐

    Liferay的CAS SSO实现

    在Liferay中实现SSO(Single Sign-On)单点登录功能,可以让用户在一个系统登录后,无需再次输入凭证就能访问其他关联系统,极大地提高了用户体验。其中,CAS(Central Authentication Service)是一个广泛应用的...

    liferay+cas

    CAS(Central Authentication Service)则是一种单点登录(Single Sign-On,SSO)系统,用于集中处理应用程序的身份验证。将 Liferay 与 CAS 结合使用,可以实现 Liferay 门户的用户在多个关联应用之间共享认证信息...

    Liferay5.2.3和CAS配置成SSO

    本案例中,我们将探讨如何将Liferay 5.2.3与CAS(Central Authentication Service)配置为SSO系统。 Liferay是一款开源的企业级门户平台,它提供了一个灵活的框架来构建和管理Web应用程序。而CAS则是一个开源的身份...

    cas-server-3.3-release.zip

    这个压缩文件很可能是Liferay Portal中用于实现单点登录(Single Sign-On,SSO)功能的组件。Liferay是一个开源的企业级门户平台,广泛用于构建企业内部和对外的Web应用程序。 单点登录(SSO)是一种身份验证机制,...

    liferay教程

    此外,Liferay还支持SSO(Single Sign-On)和LDAP集成,以便于企业进行身份验证和权限管理。 在实际应用中,Liferay的自定义开发是必不可少的。开发者可以通过编写Java Portlets、JSR-286 Portlets或者Freemarker...

    liferay 资料

    - 它支持 LDAP 和 SSO(单点登录),便于与企业现有身份验证系统集成。 7. **移动支持**: - Liferay 提供了移动友好的界面,同时也支持开发针对移动设备的 portlets。 - 通过 Liferay 移动 SDK,开发者可以构建...

    基于LDAP、SSO和Liferay的信息及应用集成门户框架分析 (2017年)

    本文对基于 LDAP 轻量目录服务、SSO 单点登录和 Liferay 框架的门户模型的架构和在信息及应用集成领域发挥的作用进行了研究和阐述,以高效的应用和信息集成和消除信息孤岛为目标,通过对该领域当前发展情况和存在问题...

    Liferay门户手册.pdf

    实现这一目标通常需要配置Liferay以支持SSO协议(如SAML或OAuth),并与相应的SSO提供商进行对接。 ##### 4.5 用户布局初始化 用户布局初始化是指设置和配置Liferay门户的初始界面布局和用户界面元素。这可能包括...

    liferay学习系列文章

    9. **安全与身份验证**:Liferay的安全机制,如SAML SSO、OAuth认证,以及防止XSS、CSRF等攻击的方法。 10. **扩展与插件**:Liferay MarketPlace中有大量的预构建插件,学习如何安装和开发自己的插件,增强Liferay...

    liferay + cas + ldap 集成配置

    Liferay 支持多租户、单点登录(SSO)和复杂的用户权限管理。 2. **Central Authentication Service (CAS)**:CAS 是一个开放源代码的单点登录系统,设计用于为Web应用程序提供统一的认证服务。用户只需要在一个...

    Liferay管理员手册

    - **单点登录**: SSO集成和设置。 - **中央验证服务(CAS)**: CAS认证配置。 - **身份验证:NTLM**: NTLM认证配置。 - **身份验证:OpenID**: OpenID认证配置。 - **身份验证:OPENSSO**: OPENSSO认证配置。 -...

    Liferay平台开发使用详细PPT演示文稿

    - **身份和访问管理**:通过LDAP、单点登录(SSO)等实现用户身份验证和授权。 - **工作流支持**:集成BPM引擎如Activiti,实现业务流程自动化。 3. **开发扩展** - **portlet开发**:开发者可以使用Java、...

    liferay帮助文档

    - **cas**: 单点登录(Single Sign-On, SSO)的工程文件,用于实现用户在整个系统中的统一登录。 - **配置文件**: 如`liferay-portlet.xml`和`struts-config.xml`,这些文件用于定制Liferay的功能,如配置Portlet的...

    基于Liferay+Portal技术的校园信息门户研究与实现

    此外,Liferay还具备单点登录(Single Sign-On,SSO)能力,进一步增强了用户体验。 ##### 3.2 Struts、Hibernate与Spring技术 在实现校园信息门户的过程中,Struts、Hibernate和Spring这三种技术扮演了重要角色。...

    liferay+cas实现单点登录步骤

    在IT领域,单点登录(Single Sign-On,简称SSO)是一种方便用户管理和身份验证的技术,它允许用户通过一次登录就能访问多个相互关联的应用系统,无需多次输入凭证。Liferay是一款流行的开源企业级门户平台,而CAS...

    Liferay Portal 介绍

    它还支持单点登录(SSO)、OpenID和OAuth等标准,确保数据的安全性和用户认证的有效性。 **总结** Liferay Portal 作为一个全面的门户解决方案,不仅具备强大的内容管理、社区构建和安全功能,还允许开发者深入...

    CAS, Liferay和Alfresco portlet三者的整合

    2. **集成Liferay与CAS**:在Liferay中配置CAS客户端,使Liferay能够识别CAS服务器的认证响应,实现SSO登录。 3. **集成Alfresco与CAS**:同样地,Alfresco也需要配置成使用CAS进行认证,确保所有系统共享同一用户...

Global site tag (gtag.js) - Google Analytics