`
fandayrockworld
  • 浏览: 312990 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

关于CAS实现单点登录的思考

阅读更多

      最近要做单点登录,于是研究了两天CAS,对用户注册这个问题很纠结,有以下两种方式,不知哪个更好,期待大家讨论。

 

      1、Server端有DB,自己做好用户注册的实现,将接口提供给各个Client端(具体用什么方式让Client端调用是个难点,难点1)。

       这样的话,用户登录某一应用(CAS中的Client端)时,会被拦截,转到Server端,在Server端读数据库进行验证,验证通过后,返回到Client端,然后Client端再读自己的数据库,取出用户的信息(此处很纠结,因为各个Client的用户实体的属性是不一样的,比如有的Client端的用户有手机号这一属性,有的则没有,所以综合了一下,只希望在Server端存用户的用户名和密码)。

 

      2、Server端无DB,注册时到各Client端只把用户信息保存到各自的DB。

      这样的话,用户登录某一应用(CAS中的Client端)时,会被拦截,转到Server端,Server端根据请求的不同判断该调用哪个Client的DB进行验证(难点2),此处又要有分支了:

      1)、验证的时候把用户信息读出来,验证通过后,将用户信息直接传给Client端(难点3),这样Client端就不用再读DB提取用户信息了。

      2)、验证的时候不读用户的信息,验证通过后,返回到Client端,Client端再读用户信息。

 

大家觉的用什么方式好一些?并希望大家对标红的三个难点进行讨论。

 

 

这个帖子不错:http://www.iteye.com/topic/165313

 

BTW:

感谢大家的热情参与,特别鸣谢:wad12302、denger 、fallen_lord、lovit

大家可以看一下他们的发帖,会得到不少信息。

扩展CAS等具体做法请参照fallen_lord的发帖。

稍后我会参照他们的观点作出整理,loading..........

 

-----------------------------------分割线-----------------------------------------------------

 

现在正在实现着,等实现好了再把方案完整的贴出来。

采用的方式是REST,谢谢denger的建议,至于CAS怎么集成REST,大家可以去看denger博客上的文章:http://denger.iteye.com/blog/973068

 

loading...........

 

分享到:
评论
14 楼 fandayrockworld 2011-04-25  
jsp_boy 写道
用一个LDAP服务器,如Active Directory来集中管理用户信息。CAS跟LDAP结合进行身份验证,各个应用自己维护各自的用户信息。当然这会涉及到各个应用与LDAP服务器之间用户信息同步的问题。

学艺不精,这就去了解一下LDAP。
13 楼 fandayrockworld 2011-04-25  
wad12302 写道


当用户A单点登录到B系统时候 那么B系统对A用户的权限验证问题(B系统中没有A的用户信息,是否需要数据同步),

通过2个数据源链式访问验证用户,那么过后对于 一些操作(读取,删除)权限的验证 有没有什么好的策略进行延伸


也许这个问题已经不是单点登录问题??

主要想知道有什么好的机制


嗯,这个问题的确值得讨论。

权限这一块的确是超出了CAS的范围,但如果用CAS的话,权限这一块肯定要和他(CAS)结合起来,
我现在的做法是:
权限放在各个client端,当CAS验证通过后,返回到各个client端再调用相应的模块,当然,这个需要更深入的了解CAS了,得要做好配置。

另外,你的楼下说了LDAP的方式,我学艺不精,不知道这个是否适合你说的这种情况。
12 楼 fandayrockworld 2011-04-25  
@罗卜头,@hszdz,@kjj
你们的观点都是支持1的。
但是CAS不做成1这样的方式肯定有他的考虑,就像楼上@wad12302说的:
引用
其实针对多个用户信息不同表情况 只是限于 继承原有系统,如果新系统 可能都会采取多个系统共用一个用户信息(只针对于企业应用系统)

就像这样:继承原有的系统的话,2明显要比1好。
可能CAS是出于这样的考虑吧。

另外,纠结了好多天,最终采用的却是1:
但是用户注册等的实现是通过另起一个webservice服务的方式实现的,用webservice的原因是,这个接口可能会php、java等多种语言调用,实在想不出什么更好的方式了,就用了webservice。
大家有更好的方式吗?
11 楼 lovit 2011-04-25  
不过在某些情况下,如现有不同系统的整合,用户密码信息也可以放在不同的客户端。CAS Server不是支持多个数据源,一个接一个验证吗?
10 楼 lovit 2011-04-25  
像注册,你可以做的CAS Server端,只保存主要的用于登录的信息,到了客户端,你想怎么加附加属性都行啊。像QQ的应用,你登录时,不就是手机、邮箱、密码这类通用的信息,这些信息就保存在CAS Server端。进入各应用后,再完善扩展信息,如工作经验、性别、地区等,这个就好比QQ里围脖信息的完善,像QQ校友里的学校的设置等等。这样不就解决了。我们要从现有成熟的行业去分析与解决问题。
9 楼 jsp_boy 2011-04-25  
用一个LDAP服务器,如Active Directory来集中管理用户信息。CAS跟LDAP结合进行身份验证,各个应用自己维护各自的用户信息。当然这会涉及到各个应用与LDAP服务器之间用户信息同步的问题。
8 楼 wad12302 2011-04-25  
谢谢!

其实针对多个用户信息不同表情况 只是限于 继承原有系统,如果新系统 可能都会采取多个系统共用一个用户信息(只针对于企业应用系统)


还有一点就是对于多数据源问题,这个对于认证时候可以选择:

但是我主要是想表达另一个问题是:用户信息问题(也只是企业应用,基于原有系统集成)
系统A   a_user

系统B   b_user


当用户A单点登录到B系统时候 那么B系统对A用户的权限验证问题(B系统中没有A的用户信息,是否需要数据同步),

通过2个数据源链式访问验证用户,那么过后对于 一些操作(读取,删除)权限的验证 有没有什么好的策略进行延伸


也许这个问题已经不是单点登录问题??

主要想知道有什么好的机制
7 楼 kjj 2011-04-25  

就我的使用cas来说,用户信息肯定要统一起来

各个client如果都有自己的用户数据库那么就失去用户信息的意义了

这些其实相当于一个普通的用户相关信息

真正的用户名密码都只有一套

6 楼 hszdz 2011-04-25  
单点登录,最基本的用户数据还是要存储在server端
否则,单点登录就失去意义:不同的应用有不同的账号,你怎么实现漫游?
5 楼 罗卜头 2011-04-25  
我个人觉得 选1...
理由是...你的server是个用户中心.他提供向外服务..
所有的系统依赖于他,而对于依赖他的Client端特有的属性,比如手机,如果不是大家都需要,就放在Client处, Client端也有个数据库,每天同步即可,或者有修改即使广播更新

我感觉方案2就像层皮,,不是真真意义上的用户中心了..
如果用户信息需要同步..你的广播源用谁了?逻辑上不是很合适吧



4 楼 fandayrockworld 2011-04-23  
wad12302 写道
这个了解。

主要是现在 想了解怎么 分配注册这个问题:

比如我有多个系统进行合并,并且每个系统 都有自己的用户信息存储表

系统A   a_user

系统B   b_user

那么 现在我使用单点登录时候 怎么判断查询那个 表的用户信息好,有什么策略没有。

应为cas 提供验证,但是登录时候 用户名和密码最终是用哪里的?


从你问的这些问题看,你根本就没深入了解一下CAS,建议多上网上查查,另外,我文中最后的那个链接挺不错的,仔细看完了估计你就了解的差不多了。

对于你的问题:

找到deployerConfigContext.xml这个文件,在beans标签的下面加上以下两个数据源(注意,所加的这两个数据源必须是beans下面的第一个bean):
<bean id="dataSource1" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
       <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
       <property name="url"><value>jdbc:mysql://192.168.1.244:3306/cas</value></property>
       <property name="username"><value>root</value></property>
       <property name="password"><value>root</value></property>
	</bean>
	<bean id="dataSource2" class="org.springframework.jdbc.datasource.DriverManagerDataSource" destroy-method="close">
       <property name="driverClassName"><value>com.mysql.jdbc.Driver</value></property>
       <property name="url"><value>jdbc:mysql://192.168.1.245:3306/cas1</value></property>
       <property name="username"><value>root</value></property>
       <property name="password"><value>root</value></property>
	</bean>


然后找到:
<bean
					class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />

把他注释掉,加上以下两个:
<bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
				        <property name="sql" value="select password from a_user where username=?" />
				      <property name="dataSource" ref="dataSource1" />
				</bean>
		        <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">
				        <property name="sql" value="select password from b_user where username=?" />
				      <property name="dataSource" ref="dataSource2" />
				</bean>

修改成这样就可以了。

然后:

假如a_user中有一个用户:auser,b_user中有一个用户buser,这样你无论用哪一个用户登录,CAS就会先查a_user,如果用户名密码都正确,那么就通过,如果a_user中验证失败,那么CAS就会再查b_user,用户名密码都正确就算通过了,此时不正确,就算这次登录验证没通过。

如果现在还不知道怎么回事,那我就哭了。。。。。
另外,千万不要成为伸手党,自己查资料才是王道。
3 楼 wad12302 2011-04-22  
这个了解。

主要是现在 想了解怎么 分配注册这个问题:

比如我有多个系统进行合并,并且每个系统 都有自己的用户信息存储表

系统A   a_user

系统B   b_user

那么 现在我使用单点登录时候 怎么判断查询那个 表的用户信息好,有什么策略没有。

应为cas 提供验证,但是登录时候 用户名和密码最终是用哪里的?
2 楼 fandayrockworld 2011-04-22  
wad12302 写道
我也想问下:

那么现在 server端进行验证的时候 怎么判断用户的信息 ??
server这边怎么获取用户信息??

直接连接client 的数据库吗 还是怎么的??


是否需要一个 共享的 用户信息保存中心?


直接连Client数据库。
如果你有一个以上的Client,那么就把这些Client的数据库信息都配置到Server端,验证的时候Server端会根据你配置的Client的数据库信息去读Client的数据库,如果其中任何一个通过了就算通过了。

不需要共享的用户信息保存中心。

PS:
CAS只提供验证、退出等功能,不提供注册等功能。
1 楼 wad12302 2011-04-21  
我也想问下:

那么现在 server端进行验证的时候 怎么判断用户的信息 ??
server这边怎么获取用户信息??

直接连接client 的数据库吗 还是怎么的??


是否需要一个 共享的 用户信息保存中心?

相关推荐

    集成cas实现单点登录认证.zip

    本压缩包"集成cas实现单点登录认证.zip"显然包含了关于如何使用CAS(Central Authentication Service)框架集成SSO认证的资源。下面我们将详细探讨相关的知识点。 1. CAS简介:CAS是耶鲁大学开源的一个Web应用的...

    基于Cas的单点登录实现

    **基于Cas的单点登录实现** 单点登录(Single Sign-On,简称SSO)是一种在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统的技术。它为用户提供了一种方便、高效的访问多系统的方式,同时减少...

    cas 单点登录 解决方案.

    cas 单点登录解决方案可以通过多种方式来实现,例如使用 cas 服务器、LDAP 服务器、Active Directory 等。 cas 服务器可以作为身份验证服务器,LDAP 服务器可以作为用户信息存储服务器,Active Directory 可以作为...

    cas实现单点登录 功能

    本文档将深入探讨如何使用 CAS 实现 Java 应用中的单点登录功能。 一、CAS 概述 CAS 是一个开源的身份验证框架,其核心目标是为用户提供一种集中式的身份验证方式,使得用户在访问各个应用时无需重复输入用户名和...

    CAS5.3+windows AD域实现单点登录免身份认证.docx

    CAS 5.3 及 Windows AD 域实现单点登录免身份认证 CAS(Central Authentication Service)是一种流行的开源身份验证系统,旨在提供单点登录(SSO)解决方案。Windows AD(Active Directory)则是微软公司推出的目录...

    用cas实现mantis单点登录和登出

    ### 使用 CAS 实现 Mantis 单点登录与登出 #### 概述 单点登录(Single Sign-On,简称 SSO)是一种常见的身份认证模式,它允许用户在多个应用程序和服务中仅通过一次登录就能访问所有相关系统而无需多次输入密码。...

    CAS实现sso单点登录原理

    "CAS实现sso单点登录原理" CAS(Central Authentication Service)是Yale大学发起的一个企业级的、开源的项目,旨在为Web应用系统提供一种可靠的单点登录解决方法(属于Web SSO)。CAS开始于2001年,并在2004年12月...

    cas实现单点登录服务端及客户端

    CAS(Central Authentication Service)是一种广泛使用的开放源代码的单点登录(Single Sign-On,SSO)框架,由耶鲁大学开发并维护。SSO允许用户通过一次登录验证就能访问多个应用系统,无需在每个系统之间单独进行...

    cas实现单点登录,登出(java和php客户端)

    标题中的“CAS实现单点登录,登出(Java和PHP客户端)”指的是使用中央认证服务(Central Authentication Service,简称CAS)来构建一个跨域、跨平台的单点登录(Single Sign-On, SSO)系统。在这样的系统中,用户只...

    liferay+cas实现单点登录步骤

    【Liferay + CAS 实现单点登录步骤】 在IT领域,单点登录(Single Sign-On,简称SSO)是一种方便用户管理和身份验证的技术,它允许用户通过一次登录就能访问多个相互关联的应用系统,无需多次输入凭证。Liferay是一...

    开源ITSM工具itop接入单点登录框架cas实现步骤.docx

    "itop接入CAS单点登录框架实现步骤" 本文将详细介绍开源ITSM工具iTop接入开源单点登录框架CAS的实现方法。该方法经过实践验证,已经在作者的单位中应用。 CAS框架简介 CAS(Central Authentication Service)是一...

    CAS单点登录(java)

    CAS单点登录CAS单点登录CAS单点登录CAS单点登录

    cas实现单点登录

    ### CAS实现单点登录(Single Sign-On, SSO)及单点登出(Single Sign-Out, SSO)机制详解 #### 一、引言 随着企业级应用的日益增多,多系统之间的集成变得越来越重要。单点登录技术应运而生,解决了用户需要在多个...

    基于Java集成CAS单点登录【接部署即可启用】

    基于Java中CAS的单点登录,有服务端的所有源码,将tomcat目录下的所有资源直接拷到Tomcat服务中间件的webapp目录下,阅读tomcat-webapp中的read.txt文档,查看使用说明,适用于第一次开发CAS单点登录的同学们,简单...

    利用CAS实现单点登录的完整实例

    总结,通过学习和实践这个"利用CAS实现单点登录的完整实例",你将掌握如何使用Jasig CAS构建一个高效的单点登录系统,从而提升用户体验,简化身份验证管理,并加强系统的安全性。记得深入理解每个步骤,并根据实际...

    CAS整合LDAP实现单点登录原理及部署

    CAS整合LDAP实现单点登录的原理及部署学习笔记,cas实现单点登录,ldap负责账户管理

    spring boot整合CAS Client实现单点登陆验证的示例

    Spring Boot 整合 CAS Client 实现单点登录验证的示例 Spring Boot 整合 CAS Client 是一种流行的解决方案,用于实现单点登录(Single Sign-On,简称 SSO)。在多个应用系统中,用户只需要登录一次就可以访问所有...

    cas 服务器 实现单点登录

    用cas实现单点登录 构造实现 内外分离的系统 更高的提高系统的安全性

    Tomcat 下用cas实现单点登录

    Tomcat 下用cas实现单点登录,实现系统整合。

    shiro+cas实现单点登录 示例代码,送源码分析url

    shiro+cas实现单点登录 示例代码,送源码分析url:http://note.youdao.com/noteshare?id=a83380ee8fc6913162042e865689844e&sub=CD905CCCE4134A159326DC2DFC1AF268

Global site tag (gtag.js) - Google Analytics