热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

Liferay与CAS及LDAP

CAS与LDAP是Liferay实现单点登录时经常会用到的东西,本篇文章分享一下个人对Liferay、CAS、LDAP等三者之间的联系与集成。在前面转载过一篇发表在IBM的开发者技
文章目录[隐藏]
  • LDAP干啥

CAS与LDAP是Liferay实现单点登录时经常会用到的东西,本篇文章分享一下个人对Liferay、CAS、LDAP等三者之间的联系与集成。在前面转载过一篇发表在IBM的开发者技术社区网站的文章《转:Liferay 集成 CAS 实现单点登录与应用系统集成》,里面有些原理的内容阐

CAS与LDAP是Liferay实现单点登录时经常会用到的东西,本篇文章分享一下个人对Liferay、CAS、LDAP等三者之间的联系与集成。在前面转载过一篇发表在IBM的开发者技术社区网站的文章《转:Liferay 集成 CAS 实现单点登录与应用系统集成》,里面有些原理的内容阐述的不多,本文将试着从理论层面对liferay与CAS和LDAP的关系进行一个比较清晰的描述,本文暂不涉及技术实现细节,主要讲理论。

单点登录

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。(百度百科)

随着企业信息化的发展,在一个企业中经常会碰到一个业务人员需要登录多个业务系统,比如OA、HR、ERP、CRM、EAM、EIP等,业务人员对此烦不胜烦,同时对企业的安全、管理等形成了挑战。单点登录的目标就是用户只需要登录了其中的一个系统,其他的系统也都不用登录了,用户在一个系统进行了注销,其他系统也都注销了。

实现单点登录的技术有许多,比如CAS、ADFS、OpenID等等。我们今天要介绍的CAS只是单点登录实现方案的一种选择。

CAS简介

CAS是Yale(耶鲁)大学发起的一个开源项目,旨在为Web应用系统提供一种可靠的单点登录方法,CAS在2004年12月正式成为JA-SIG的一个项目。

CAS特点:

1、开源的企业级单点登录解决方案,有非常多的成功案例。

2、CAS Server根据需要可以独立部署成Web应用。

3、CAS Client支持众多的客户端(这里指单点登录系统中的各个Web应用),包括Java,.Net,PHP,Perl,Ruby等。

LDAP简介

LDAP是轻量目录访问协议,英文全称是Lightweight Directory Access Protocol,一般都简称为LDAP。我们可以简单的把他看作是一种特殊的数据库。为读查询做了非常多的优化,拥有非常高的读性能,但是写的性能相对较低。

在单点登录系统中,通常选择LDAP做统一用户的存储,优势有如下:

1、 符合目录X.500标准,[email protected]#com搞(%代@#码网@易于系统间整合

2、有效保证资源类产品与外界业务间的共享和整合

3、发挥了目录存储的查询效率,提升平台性能

Liferay与CAS整合

Liferay通常被当作门户使用,门户通常是当作一个企业中系统的入口,当用户在Liferay门户上登录之后,就能访问其他的系统而不必再次登录,以达到“一点登录,多点漫游”的目标。

在Liferay里面,默认整合了CAS,可以方便的让我们将Liferay与CAS进行集成,以实现一个单点登录系统。

CAS从大的方面看有两部分组成,CAS Client与CAS Server,一个客户端,一个服务端。

CAS Server

CAS Server 负责完成对用户的认证工作, CAS Server一般需要独立部署,我们可以将他部署到单独的服务器,也可以和Liferay放到同一个Tomcat下面(这种从逻辑上来看其实也是独立的),推荐前者,应用和CAS Server是分开的,所以《转:Liferay 集成 CAS 实现单点登录与应用系统集成》这篇文章中介绍的集成方式一般是不推荐的,作为演示测试还可以使用,生产环境强烈不推荐。

CAS Server处理用户名、密码等凭证 (Credentials) ,它可能会到数据库检索一条用户帐号信息,也可能在 XML 文件中检索用户密码,也可能从LDAP中检索。无论哪种方式, CAS均提供一种灵活但统一的接口与实现分离的方式, CAS 采用的认证方式跟 CAS 协议是分离的,也就是,这个认证的实现细节可以自己定制和扩展。这段话怎么理解呢?也就是说CAS从用户数据源(可以是关系数据库、xml、ldap、nosql等)中查询出用户名和密码,和用户输入的进行比较,如果匹配就认为认证成功。数据源的类型可以根据我们的实际需求进行定义,他不有关心我们的用户数据存在哪,甚至存在文本文件中也行,只要我们写相应的适配器即可,所以我们从这里可以看到LDAP其实并不是必须的(统一用户部分后面说明)。认证方式跟CAS协议分离的意思是,我们在数据源中保存的密码可能是加密的,比如MD5加密、SHA加密等,而用户输入的帐号密码是没加密,我们在做这个验证的时候,这个加密或比较的过程可以自己实现,CAS里面只提供的是一种接口,《转:Liferay 集成 CAS 实现单点登录与应用系统集成》在这篇文章中就基于CAS的接口实际了Liferay密码的加密。

CAS Client:

CAS Client 负责部署在客户端,也就是待认证的应用,Liferay其实就是一个CAS Client,所以我们在liferay的jar包里面可以看到CAS Client的jar包,CAS Client 的作用是当对本地 Web 应用的受保护资源有访问请求,并且需要对请求进行身份认证时,Web 应用不再接受任何的用户名密码等类似的 Credentials ,而是重定向到 CAS Server 进行认证。

回到Liferay与CAS的整合,当我们整合成功之后,我们在浏览器里面输入http://localhost:8080/c/portal/login这样的登录地址,或者访问一个需要登录才能访问的页面时,会跳转到CAS Server(前面说了CAS Server可以和Liferay部署到同一个tomcat下面–但是不推荐,但是更推荐部署成不同的tomcat下面,尤其推荐和Liferay就不部署在一个服务器上)上的登录地址,如:http://localhost:8020/cas/login类似这样的页面,我们需要在CAS Server上输入帐号密码进行认证,认证成功后返回到Liferay的页面上。

CAS怎么判断用户有没有登录呢?CAS Client与Liferay或业务应用整合的时候,需要在业务应用(如Liferay)的web.xml里面添加一个filter,来判断请求中是否有token。

CAS的一个认证过程如下图所示:

图片来源于网络

CAS Client与受保护的客户端应用部署在一起,以Filter方式保护受保护的资源。对于访问受保护资源的每个Web请求,CAS Client会分析该请求的Http请求中是否包含ServiceTicket,如果没有,则说明当前用户尚未登录,于是将请求重定向到指定好的CASServer登录地址,并传递Service(也就是要访问的目的资源地址),以便登录成功过后转回该地址。用户在第3步中输入认证信息,如果登录成功,CAS Server随机产生一个相当长度、唯一、不可伪造的ServiceTicket,并缓存以待将来验证,之后系统自动重定向到Service所在地址,并为客户端浏览器设置一个TicketGrantedCOOKIE(TGC),CASClient在拿到Service和新产生的Ticket过后,在第5,6步中与CAS Server进行身份合适,以确保ServiceTicket的合法性。

LDAP干啥

上面貌似没有提LDAP的事,他干嘛呢?比如我们现在有OA、HR、ERP、CRM、EAM、EIP等六个系统,如果这六系统里面的用户帐号都不一样,张三在OA里面的登录帐号是zhangsan,在HR里面的登录帐号是工号:00356,ERP里面是中文名称张三,在ERP里面是email地址:zhangsan,在CRM里面是userid:50291等等,不同的系统里面的帐号不一样,各自是独立的体系,现在OA里面的zhangsan登录了,HR里面并没有zhangsan这个用户呀,自然OA里面的zhangsan也就没有办法形成统一认证,统一登录了。

所以在实现单点登录的前提,一般是要实现统一用户,我们将OA、HR、ERP、CRM、EAM、EIP这些系统里面的用户信息都统一了或者以某一个系统的为准,企业里面一般以人力资源系统的数据为准,用户在HR里面是00356,在其他系统里面也都是00356。

由于LDAP优秀的读性能以及符合目录标准,我们一般将统一用户之后的用户认证信息保存到LDAP里面所有的业务系统OA、HR、ERP、CRM、EAM、EIP等里面的用户认证时的数据都从LDAP里面来取。这个时候可能就有同学问了,我就是不想用LDAP行不,行呀,我们只要将这些用户信息统一的保存一份,就行了,保存到哪无所谓。可以是LDAP,也可以是关系数据库、NOSQL数据库、KV数据库等各种数据源都行。

那我们为啥选择使用LDAP呢?前面提过LDAP的优势,认证的过程主要是查询,LDAP有非常高的读性能;其次我们做统一用户的时候是希望做系统数据整合的,有许多第三方的系统都默认支持LDAP,如果我们采用其他的方式,做用户数据的导入时可能就需要再重新开发接口或适配器。

LDAP与CAS的关系

还是以我们与Liferay整合为例子,当用户登录的时候,跳转到了cas的登录界面比如:http://localhost:8020/cas/login,这个时候用户输入了帐号密码,CAS接收到此帐号密码的时候,根据帐号名称从统一用户数据源(LDAP)中查询一条记录,查询出来之后,获取到了这个帐号的信息,将里面的密码取出来和用户输入的做比较,这个比较的过程就是认证了,这个比较的过程我们可以自己来写实现,比如我们的数据源中的用户数据保存的是MD5加密的,我们就要在这里对用户的密码进行一次MD5加密,再和是查询出来的比较。这也是前面说的认证和CAS协议分离。如果这个比较的过程我们不做二次开发,CAS默认的实现是只要相同就通过了,所以有加密的我们都要再根据接口写一下相应的实现。

LDAP与Liferay的关系

LDAP里面存的是标准的用户数据,Liferay里面的用户应该从LDAP里面导入。所以LDAP里面的用户数据和Liferay里面的用户数据的基础属性是相同的,我们在LDAP里面的配置就是配置将LDAP的数据导入到Liferay里面来。当我们在liferay里面编辑一条用户数据的时候,在保存成功后也会同步到LDAP里面(可以配置为是否开启,一般统一用户的时候只允许一个地方写数据,其他的节点都是只读数据)。

在这个过程中LDAP相当于一个中央仓库,Liferay其实也是一个客户端。

Liferay、CAS、LDAP的关系

现在假设我们在LDAP里面添加了一条数据,这个时候LDAP不会通知Liferay,Liferay里面是肯定没有这个用户,但是这个用户要登录怎么办呢?此时当此用户登录的时候,Liferay检测到此用户不存在,后台会从LDAP里面将用户导入到Liferay中,此过程对用户是不可见的。新建的用户登录和老用户登录的体验是一致的。

相关问题

可能有同学会问,上面说的单点登录都是统一用户的,如果是老系统没办法做统一用户,是不是就不能做单点登录了?

一般做单点登录肯定是最好上统一用户,这样好管理,开发也方便,但对于没办法做的老系统或老用户,如果要做单点登录一般就是做的用户映射,要知道我们前面说的张三、zhangsan、00356等等是同一个人,这些之前要建立一个映射关系。

CAS Client需要在web.xml里面添加过滤器,还是需要对系统做改造,老系统没法改造怎么办?

对于没法改造的老系统一般可以采用模拟登录的方式,这个时候就不用CAS了。

人力资源的数据与统一用户的数据啥关系?

一般一个企业里面的人力资源的数据是最标准的用户数据(前提是管理规范的公司),比如一个新员工入公司之后,员工的数据必然是先进入到人力资源系统里面的,这个时候需要人力资源和统一用户的之间有数据的同步。

人力资源的数据保存的是员工的属性信息,比如员工的岗位、工资、名称、绩效成绩等;统一用户里面的数据只是用户的基础数据,统一用户里面的数据是人力资源里面的员工数据的一个子集。

不想使用LDAP,也不建立统一用户,就使用Liferay里面的用户作为标准行不?

完成可行,不使用LDAP,我们就使用Liferay里面的用户数据作为标准,其他的系统比如OA、ERP、CRM等这些的用户数据都从Liferay里面进行导入,并和Liferay里面的用户数据保持一致。我们认证的时候就让CAS从Liferay的数据库中进行帐号的验证。其实这个时候Liferay里面的用户已经算是统一用户了。

统一用户的关键是以一个系统的数据作为标准,只要保持全局的统一即可,我们也可以使用OA里面的用户数据作为标准,也可以使用ERP里面的用户数据作为标准都行。



推荐阅读
  • 开发心得:利用 Redis 构建分布式系统的轻量级协调机制
    开发心得:利用 Redis 构建分布式系统的轻量级协调机制 ... [详细]
  • 本文详细介绍了如何在 Django 项目中使用 Admin 管理后台,包括创建超级用户、启动项目、管理数据模型和修改用户密码等步骤。 ... [详细]
  • 秒建一个后台管理系统?用这5个开源免费的Java项目就够了
    秒建一个后台管理系统?用这5个开源免费的Java项目就够了 ... [详细]
  • 您的数据库配置是否安全?DBSAT工具助您一臂之力!
    本文探讨了Oracle提供的免费工具DBSAT,该工具能够有效协助用户检测和优化数据库配置的安全性。通过全面的分析和报告,DBSAT帮助用户识别潜在的安全漏洞,并提供针对性的改进建议,确保数据库系统的稳定性和安全性。 ... [详细]
  • 本文深入探讨了NoSQL数据库的四大主要类型:键值对存储、文档存储、列式存储和图数据库。NoSQL(Not Only SQL)是指一系列非关系型数据库系统,它们不依赖于固定模式的数据存储方式,能够灵活处理大规模、高并发的数据需求。键值对存储适用于简单的数据结构;文档存储支持复杂的数据对象;列式存储优化了大数据量的读写性能;而图数据库则擅长处理复杂的关系网络。每种类型的NoSQL数据库都有其独特的优势和应用场景,本文将详细分析它们的特点及应用实例。 ... [详细]
  • Swoole加密机制的安全性分析与破解可能性探讨
    本文深入分析了Swoole框架的加密机制,探讨了其在实际应用中的安全性,并评估了潜在的破解可能性。研究结果表明,尽管Swoole的加密算法在大多数情况下能够提供有效的安全保护,但在特定场景下仍存在被攻击的风险。文章还提出了一些改进措施,以增强系统的整体安全性。 ... [详细]
  • 深入解析 Django 中用户模型的自定义方法与技巧 ... [详细]
  • Python作为当今IT领域中最受欢迎且高效的语言之一,其框架能够显著加速Web应用程序的开发过程。本文推荐并对比了十大顶级Python Web开发框架,其中CubicWeb以其卓越的代码重用性和模块化设计脱颖而出,为开发者提供了强大的支持。 ... [详细]
  • NoSQL数据库,即非关系型数据库,有时也被称作Not Only SQL,是一种区别于传统关系型数据库的管理系统。这类数据库设计用于处理大规模、高并发的数据存储与查询需求,特别适用于需要快速读写大量非结构化或半结构化数据的应用场景。NoSQL数据库通过牺牲部分一致性来换取更高的可扩展性和性能,支持分布式部署,能够有效应对互联网时代的海量数据挑战。 ... [详细]
  • Linux学习精华:程序管理、终端种类与命令帮助获取方法综述 ... [详细]
  • 本文详细介绍了如何解决DNS服务器配置转发无法解析的问题,包括编辑主配置文件和重启域名服务的具体步骤。 ... [详细]
  • 本文深入解析了 Kubernetes 控制平面(特别是 API 服务器)与集群节点之间的通信机制,并对其通信路径进行了详细分类。旨在帮助用户更好地理解和定制其安装配置,从而增强网络安全性,确保集群的稳定运行。 ... [详细]
  • 在CentOS 7环境中安装配置Redis及使用Redis Desktop Manager连接时的注意事项与技巧
    在 CentOS 7 环境中安装和配置 Redis 时,需要注意一些关键步骤和最佳实践。本文详细介绍了从安装 Redis 到配置其基本参数的全过程,并提供了使用 Redis Desktop Manager 连接 Redis 服务器的技巧和注意事项。此外,还探讨了如何优化性能和确保数据安全,帮助用户在生产环境中高效地管理和使用 Redis。 ... [详细]
  • 浏览器作为我们日常不可或缺的软件工具,其背后的运作机制却鲜为人知。本文将深入探讨浏览器内核及其版本的演变历程,帮助读者更好地理解这一关键技术组件,揭示其内部运作的奥秘。 ... [详细]
  • 公司计划部署邮件服务器,考虑到已有域名,决定自行搭建内部邮件服务器。经过综合考量,最终选择在Linux环境中进行搭建,并记录了相关配置和实践过程。本文将详细介绍Postfix的基本设置步骤和实践经验,帮助读者快速掌握邮件服务器的搭建方法。 ... [详细]
author-avatar
尼古拉斯Ga
这个家伙很懒,什么也没留下!
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有