CAS SSO 单点登录 【完整版】

什么是单点登录?什么是SSO?


SSO就是单点登录!!!大笑


SSO即Single Sign On。


可是为什么我们要单点登录呢?为什么不能把所有的系统做成一个war包里呢?

道理很简单啊,如果这个银行这个企业全是你一家公司里的一个项目组包下来了,然后是从头开始开发,你当然可以把所有的功能模块做到一个WAR工程中啊。


可是很多时侯我们是做一个工程或者是两个工程然后需要和另一个工程去做结合,每个工程都有一个入口地址,对吧?那么我们从用户的角度出发来说:


如果一个企业的工作人员需要操作4,5个不同的系统如:HR系统、报销系统、进销存系统还有企业内的eLearning系统和SAP系统,那么他要登录5次对不对?要登录5次?


那么有人说了,为什么这么麻烦呢?我们不能把所有的系统除了一个主系统,然后让用户只要登录一次,再把其它系统的链接以菜单的形式挂在主系统的菜单点,然后去除登录功能,这样用户不就可以只需要登录一次了呢?


答案当然是:你可以这样做。


可是安全性呢?


因此我们引入了单点登录的概念,我们可以想一下,用户面对10几个系统,这10几个系统只有一个“表皮”(主页),在这个主页中有许多的外挂连接,连向10几个子系统,这10几个子系统每个都需要根据用户名和密码来判断用户是否对于本系统有无操作权限?但是用户只需要在这个“表皮”上登录一次,当他点每一个菜单链接时,系统会自动把用户名和密码做一次匹配然后根据权限系统来判断该用户是否具有相应的权限,进而使得用户可以通过主页再链入不同的子系统中,这就是单点登录。


或许是中文翻译的问题,我们就从Single Sign On这3个字来理解,只需登录一记,啊。。。这就对了,多个系统我只需要登录一次。


我们进一步设想一下,其实用户还是登录了两次,为什么呢?


对于正规的企业来说都有一个“域登录”,即WINDOWS域我们又称之为Active Directory,简称AD域,用户打开WIN7,WIN8, WINDOWS SERVER。。。bla...bla...bla...what every啦。


此时他需要输入域帐号,登录一次。


然后他进入WINDOWS桌面后,打开IE,点开公司内部OA系统,做报销或者是做请假,又登录一次。


其实是两次登录。


因此做的好的SSO,因该是怎么样啊?


即让用户登录一次,就是用户一旦登录了公司的AD域后,他在IE里打开公司内部的一些网址都无需再做登录了,因为用户的AD域帐户就是它的系统帐户。


如:公司内每个员工的邮箱帐号,它打开OUTLOOK后就自动连上了相关的MAIL服务器,然后该员工的AD域帐号加上@xxx.xxx这样的格式,这不就是他公司的邮件地址了,对吧?


对不对?这就是一个SSO的活生生的例子。


那么很多时候,确实,为了安全,我们可以让员工在登录了AD域后再打开IE,然后输入公司内的OA网址时再登录一次,这样做其实也是可以,而公司内的OA一般不仅仅只是一个系统,它一定一定是连接着多个子系统。


比如说我们一个公司的OA系统是一个EAR,它下挂有10多个WAR。




甚至一些公司还会外接如:SalesForce, SAP等其它系统,因此我们把员工打开的这层公司OA系统的最外面的这层“皮”,称之为PORTAL。


对的,PORTAL里一定含有SSO,在此先提一下。

下面是一些著名的调查公司显示的统计数据:

  • 用户每天平均16分钟花在身份验证任务上 - 资料来源:IDS
  • 频繁的IT用户平均有21个密码 - 资料来源:NTA Monitor Password Survey
  • 49%的人写下了其密码,而67%的人很少改变它们
  • 每79秒出现一起身份被窃事件 - 资料来源:National Small Business Travel Assoc
  • 全球欺骗损失每年约12B - 资料来源:Comm Fraud Control Assoc
使用“单点登录”整合后,只需要登录一次就可以进入多个系统,而不需要重新登录,这不仅仅带来了更好的用户体验,更重要的是降低了安全的风险和管理的消耗。


请看下面的统计数据:


  • 提高IT效率:对于每1000个受管用户,每用户可节省$70K
  • 帮助台呼叫减少至少1/3,对于10K员工的公司,每年可以节省每用户$75,或者合计$648K
  • 生产力提高:每个新员工可节省$1K,每个老员工可节省$350 - 资料来源:Giga
  • ROI回报:7.5到13个月 - 资料来源:Gartner   
另外,使用“单点登录”还是SOA时代的需求之一。在面向服务的架构中,服务和服务之间,程序和程序之间的通讯大量存在,服务之间的安全认证是SOA应用的难点之一,应此建立“单点登录”的系统体系能够大大简化SOA的安全问题,提高服务之间的合作效率。


以下是一个标准的企业内通过SSO来集成各个系统间的认证与权限的模型图


好了,以上基本知识普及完毕开始我们的SSO实现。

CAS SSO

SSO实现有很多产品,我们今天选用的这个是耶鲁大学发明的CAS SSO服务器。这个CAS SSO是目前我看到过的功能较全的,使用也是最简单的配置式SSO服务器,它基于spring的原理,因此这个配置文件我们看起来因当是相当的熟悉的。


它分为Server版和Client版2个模块,同时它对于一些其它功能特性如:数据库、LDAP协议(就是WINDOWS AD域使用的协议)、安全等还提供了一系列的插件。因此,在本例中,我使用的是:


Server端:

Cas Server 3.5.2


Client端:

Cas Client 3.2.1


注:

请严格按照我的版本号进行试验。


什么叫Server端 ,什么叫Client端?

看上图,假设我们有3个War包。

  • 一个叫cas-server.war,它放在tomcat里;
  • 一个叫cas-sample-site1.war,它放在jboss里;
  • 一个叫cas-sample-site2.war,它放在jboss里;

那么位于tomcat里的cas-server.war,它就是我们的CAS的Server端,位于jboss里的两个war就是我们CAS的client端。

SSO中的Server端与Client端概念搞清后,我们现在就开始布署吧。

布署cas-server

先说一下我们的环境:
  版本号  web端口
tomcat 6 9090
jboss 7 8080


我们把Server端解压得到以下这样的一个文件夹


它里面含了一堆的东西,关键在于以下这个文件夹


进入该文件夹,找到这样一个war包。



把这个war包解压后重命名成cas-server.war,放于tomcat的webapp目录中去,启动tomcat一切无误后即可。



然后我们打开一个ie,输入http://localhost:9090/cas-server会得到以下这个界面,那就说明你的cas sso已经安装成功了。


配置CAS SERVER

添加依赖包

在本例中我们将使用Oracle数据库中自建一个用户表来管理我们的用户名和密码,因此:

  1. 将oracle的ojdbc6.jar放入tomcat的lib目录内D:\tomcat\lib
  2. 将cas-server-3.5.2-release\cas-server-3.5.2\modules下的这几个文件拷入tomcat\webapp\cas-server\web-inf\lib目录内


修改配置文件

CAS SSO的好处在于它的配置文件是完全spring的,你只要懂spring就可以非常容易的在里面去添加修改自己的一些功能,我们在第一天的教程中为了尽量简单,我们只需要改动一个文件,它就是:

tomcat\webapps\cas-server\WEB-INF目录下的

deployerConfigContext.xml文件


我们用纯文件编辑器打开它,找到下面这行:

[html]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. <bean  class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" />  

把它注释掉

[html]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. <!-- 
  2. <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /> 
  3. -->  
然后再在它下面添加如下内容

[html]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. <!-- 
  2.    <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /> 
  3. -->  
[html]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">  
  2.       <property name="dataSource" ref="dataSource" ></property>  
  3.       <property name="sql" value="select password from sys_user where user_id=?" ></property>  
  4. </bean>  

好,这边我们看到了一个dataSource对吧,EASY,来。。。


[html]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. <!-- 
  2.           <bean class="org.jasig.cas.authentication.handler.support.SimpleTestUsernamePasswordAuthenticationHandler" /> 
  3. -->  
  4.           <bean class="org.jasig.cas.adaptors.jdbc.QueryDatabaseAuthenticationHandler">  
  5.             <property name="dataSource" ref="dataSource" ></property>  
  6.             <property name="sql" value="select password from sys_user where user_id=?" ></property>  
  7.           </bean>  
  8.     </list>  
  9. </property>  
  10. </bean>  
  11.   
  12. <bean id="dataSource"  
  13.     class="org.springframework.jdbc.datasource.DriverManagerDataSource">  
  14.     <property name="driverClassName" value="oracle.jdbc.OracleDriver" />  
  15.     <property name="url" value="jdbc:oracle:thin:@localhost:1521:orcl" />  
  16.     <property name="username" value="ymk" />  
  17.     <property name="password" value="password_1" />  
  18. </bean>  

注意我加的这个dataSource的bean和刚才那段配置代码之间的位置对应关系哦,别胡乱搞一个回车就乱加一行哦。


全加完了,怎么样啦?完成了吗?


还没,CAS SSO严格意义上来说需要J2EE APP SERVER里实现HTTPSSSL的双向认证模式才能正常使用,但是我们因为这个是教程,因此不想搞了太麻烦,我们可以在“不使用HTTPS认证”的情况下也可以使用CAS SSO。


为此,我们要关闭CAS SSO的HTTPS认证模式,编辑:


tomcat\webapps\cas-server\WEB-INF\spring-configuration目录下的

ticketGrantingTicketCookieGenerator.xml文件


找到下面这行

[html]  view plain   copy
  在CODE上查看代码片 派生到我的代码片
  1. <bean id="ticketGrantingTicketCookieGenerator" class="org.jasig.cas.web.support.CookieRetrievingCookieGenerator"  
  2.     p:cookieSecure="true"  
  3.     p:cookieMaxAge=
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SSO(Single Sign-On)单点登录是一种身份验证和授权机制,允许用户使用一组凭据(例如用户名和密码)登录到多个应用程序或系统中,而无需为每个应用程序重新输入凭据。 在Java中实现SSO单点登录,可以使用一些开源的框架和技术,如Spring Security、CAS(Central Authentication Service)等。 下面是一个简单的SSO单点登录的Java实现步骤: 1. 配置认证中心(Identity Provider):搭建一个独立的认证中心,负责处理用户的身份验证和授权。可以使用Spring Security框架来实现认证中心。 2. 配置服务提供者(Service Provider):在每个需要接入SSO的应用程序中,配置服务提供者,使其能够与认证中心进行通信。可以使用CAS来实现服务提供者。 3. 配置认证中心和服务提供者之间的信任关系:认证中心和服务提供者之间需要建立信任关系,以确保安全性和可靠性。可以通过在认证中心和服务提供者之间共享密钥、证书等方式来实现。 4. 实现登录页面:在服务提供者的登录页面上,添加一个登录按钮或链接,点击后将用户重定向到认证中心的登录页面。 5. 用户身份验证:用户在认证中心的登录页面上输入用户名和密码后,认证中心进行身份验证,并生成一个令牌(Token)。 6. 单点登录:认证中心将令牌返回给服务提供者,服务提供者使用该令牌进行身份验证,验证通过后,用户将被允许访问服务提供者的应用程序。 7. 单点注销:当用户在一个应用程序中注销登录时,认证中心会收到注销请求,并将该注销请求广播给所有其他已登录的应用程序,从而实现单点注销。 以上是一个简单的SSO单点登录的Java实现步骤,具体的实现方式可以根据具体的框架和技术进行调整和扩展。希望对你有所帮助!

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值