`
lijackly
  • 浏览: 70340 次
  • 性别: Icon_minigender_1
  • 来自: 北京
文章分类
社区版块
存档分类
最新评论
阅读更多
    SSO的实现机制不尽相同,大体分为Cookie机制和Session机制
   
    Weblogic通过Session共享认证信息。Session是一种服务器端机制,但客户端访问服务器时,服务器为客户端创建一个唯一的SessionId,以使在整个交互工程中始终保持状态,而交互的信息则可由应用自行指定,因此用Session方式实现SSO,不能在多个浏览器之间实现单点登录,但可以跨域。[参考这个:http://lijackly.iteye.com/blog/805779]
   
    WebSphere采用Cookie机制,Cookie是客户端机制,存储的内容包括:名字、值
过期时间、路径和域,路径与域合在一起就构成了Cookie的作用范围,因此用Cookie方式可以实现SSO,但域名必须相同。

    单点登录分为“服务器”和“客户端”,应用程序第一次访问认证,会把原来的登录画面屏蔽掉,直接转到单点登录的登录页面,当然也可以自行设计该页面;

   
  1. 认证通过后,单点登录服务器会和应用程序进行一个比较复杂的交互(某种授权机制),CAS使用的就是所谓的Ticket;
  2. 授权完成后,CAS会把页面重定向,回到Web应用(之前的请求URL会跟在跳转到Cas的后面),这样就完成了成功的登录;
  3. 单点登录服务器会在客户端创建一个Cookie,加密的,其中保存用户登录的信息;
  4. 如果此时用户希望访问其他Web应用程序,首先仍然重定向到CAS服务器。此时CAS服务器不再要求用户输入用户名密码,而是首先自动寻找Cookie,根据Cookie中保存的信息登录,之后,CAS重定向回到要访问的客户端应用程序。


    这样就实现了单点登录。这种体系中,没有通过http进行密码的传递(有用户名传递),因此十分安全。

    CAS被设计成一个独立的Web应用,目前是通过若干个Java Servlets来实现的。CAS必须运行在支持SSL的web服务器上。应用程序(客户端)可以通过三个URL路径来使用CAS(loginURL,validation URL,logout URL)。

    要点:
  1. 客户端一开始,通常跳过原来的登录界面,而直接转向CAS自带的登录界面,当然也可以在客户端的主界面上增加一个登录之类的按钮来完成跳转工作;
  2. 如果用户喜欢,也可以手工直接进入CAS的登录界面,先进行登录,再选择登录其他的客户端应用程序(这种方式主要用户测试环境);
  3. CAS的登录界面就是所谓的"主体认证",要求输入用户米密码,和普通的登录界面一样;
  4. 主体认证时,CAS获取用户名和密码,然后通过某种认证机制进行认证,通常是LDAP(NQ是用数据库)
  5. 为了进行以后的单点登录,CAS向浏览器送回一个所谓的"内存Cookie",这种cookie并不是真的保存在内存中,而是浏览器一关闭,cookie就自动过期;
  6. 认证成功后,CAS服务器会创建一个很长的、随机生成的字符串,称为"Ticket",随后,CAS将这个Ticket和成功登录的用户,以及服务联系在一起。这个ticket是一次性使用的一种凭证,只对登陆成功的用户及其服务使用一次。使用后立刻失效;
  7. 主体认证完成后,CAS将用户的浏览器重定向,回到原来的应用;CAS客户端,在从应用程序转向CAS的时候,同时也会记录原始请求的URL,因此CAS知道谁在调用自己。CAS重定向的时候,将ticket作为一个参数传递回去;
  8.     例如:
            原始应用的网址是http://www.itil.com/,在这个网址上,一开始有如下语句,转向CAS服务器的单点登录页面https://secure.oa.com/cas/login?service=http://www.itil.com/auth.aspx;
            CAS完成主体认证后,会使用下面URL进行重定向http://www.itil.com/auth.aspx?ticket= ST-2-7FahVdQ0rYdQxHFBIkKgfYCrcoSHRTsFZ2w-20。
            收到ticket之后,应用程序需要验证ticket,这是通过将ticket传递给一个校验URL来实现的,由CAS提供。
            CAS通过校验路径获得了ticket之后,通过内部的数据库对其进行判断,如有效,则返回一个NetID给应用程序。
            随后CAS将ticket作废,并且在客户端留下一个cookie。
            以后其他应用程序就使用这个cookie进行认证(通过CAS的客户端),而不再需要输入用户名和密码。







在实际使用中:

CAS Server是一个Web应用包,部署成功后,也只是一个缺省的实现,在实际使用的时候,还需要根据实际情况做扩展和定制,最主要的是扩展认证(Authetication)接口和CAS Server的界面

     认证方式基于:数据库、XML文件、LDAP Server
          CAS中采用哪种方式认证与CAS的基本协议是分开的,可以定制和扩展

    

参考:https://www.ibm.com/developerworks/cn/opensource/os-cn-cas/?ca=drs-tp1608
扩展基于数据库的认证方式
    
   配置DataStore
在CAS Server 中的 %CATALINA_HOME%/webapps/cas/WEB-INF/deployerConfigContext.xml 添加一个新的bean,记录数据库信息    
      2     配置AuthenticationHandler
               提供3个基于JDBC的AuthenticatonHandler,分别为
                    1、BindModeSearchDatabaseAuthenticationHandler是用所给的用户名和密码去建立数据库连接,根据连接建立是否成功来判断验证成功与否;
                    2、QueryDatabaseAuthenticationHandler通过配置一个SQL语句查询出密码,与所给密码匹配;
                    3、SearchModeSearchDatabaseAuthenticationHandler通过配置存放用户验证信息的表、用户名字段和密码字段,构造查询语句来验证;

               使用哪个,需要在deployerConfigContext.xml中设置,
分享到:
评论

相关推荐

    CAS实现sso单点登录原理

    CAS实现sso单点登录原理,可以方便技术人员理解

    CAS单点登录demo.rar

    这个资源是一个CAS(Central Authentication Service)单点登录演示项目,用于展示如何实现基于CAS的单点登录系统。CAS是一种常用的身份认证和授权解决方案,适用于分布式系统中的用户身份验证。该演示项目将通过...

    cas-shiro-https单点登录实现

    包含单点登录tomcat部署,cas服务器部署,项目demo,可更好的理解sso-cas登录

    CAS单点登陆工具.zip

    该资源是CAS单点登陆所需的项目,包含CAS-server-4.2.4、CAS-client-3.2.1,配合我的一篇名为CAS单点登陆实例的博客一起实操,...并深刻理解单点登陆的过程和知识点。

    Android代码-CAS_SSO_Record

    CAS SSO 单点登录记录 作者:刘仁奎 个人网址 程序喵:http://www.ibloger.net / http://www.chengxumiao.net 程序员购书导航指南:http://books.chengxumiao.net QQ:1056856191 GitHub地址:...

    黑马品优购项目

    单点登录:cas 权限管理:SpringSecurity, 跨域:cros 支付:微信扫描 短信验证:阿里大于 密码加密:BCrypt 富文本:KindEditor 事务:声明式事务 任务调度:spring task 所有的技术,都可能涉及到为什么用?怎么...

    akka-caspaxos:CAS-Paxos对等共识协议的Akka实验性实现

    对于Akka和Scala来说是一个很好的匹配: 与Akka Cluster一样,CAS-Paxos本质上也是点对点它对RAFT和Paxos的改进是提议者使用更改功能来更改状态。 由于Scala具有功能性,并且功能可以轻松地在线上进行序列化,因此...

    spring in action英文版

     11.2.4 基于Acegi和Yale CAS实现单次登录  11.3 控制访问  11.3.1 访问决策投票  11.3.2 决定如何投票  11.3.3 处理投票弃权  11.4 保护Web应用程序  11.4.1 代理Acegi的过滤器  11.4.2 ...

    汪文君高并发编程实战视频资源下载.txt

    │ 高并发编程第二阶段04讲、多线程的休息室WaitSet详细介绍与知识点总结.mp4 │ 高并发编程第二阶段05讲、一个解释volatile关键字作用最好的例子.mp4 │ 高并发编程第二阶段06讲、Java内存模型以及CPU缓存不一致...

    JAVA上百实例源码以及开源项目

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    JAVA上百实例源码以及开源项目源代码

     Java生成密钥、保存密钥的实例源码,通过本源码可以了解到Java如何产生单钥加密的密钥(myKey)、产生双钥的密钥对(keyPair)、如何保存公钥的字节数组、保存私钥到文件privateKey.dat、如何用Java对象序列化保存私钥...

    java开源包1

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包11

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包2

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包3

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包6

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包5

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包10

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

    java开源包4

    GWT Spring 使得在 Spring 框架下构造 GWT 应用变得很简单,提供一个易于理解的依赖注入和RPC机制。 Java扫雷游戏 JVMine JVMine用Applets开发的扫雷游戏,可在线玩。 public class JVMine extends java.applet....

Global site tag (gtag.js) - Google Analytics