SSO之CAS备忘

    自己负责的公司基于CAS单点登录平台架构已经上线运行,很多细节的东西是时候备忘一下了,开源的东西,具体需要记得倒不是很多,跟着debug看源码理解,学习为主。
    首先说说整个框架的思路:由于这段时间连续上了几个项目,用户登录管理这一块一直在做重复的工作,所以考虑将这些模块抽出来单独做成一个系统。最初的想法只是做一个简单的用于登录检测方面的东西,想的也很简单,选memcached来做分布式缓存,但随着项目越写越大,又加入很多功能,早已不是最早的简单验证登录这么回事了,于是选用了cas来进行改造。
    自己开发过程中的几个比较集中的阶段:

(1)
环境的搭建:重要集中在证书的生成和管理
先生成证书文件:
keytool -genkey -alias tomcat-server -keyalg RSA -keypass changeit -storepass changeit -keystore server.keystore(生成文件)
注意name是计算机的名字或者项目的域名,生成完了后自己开发过程中为了方便去host文件里将这个名字映射给本机
得到server.keystore,配置tomcat中的server.xml的ssl证书

点击(此处)折叠或打开

  1. <Connector
  2.     SSLEnabled="true"
  3.     clientAuth="false"
  4.     keystoreFile="G:/apache-tomcat-7.0.47/conf/server.keystore"
  5.     keystorePass="changeit"
  6.     maxThreads="150"
  7.     port="8443"
  8.     protocol="HTTP/1.1"
  9.     scheme="https"
  10.     secure="true"
  11.     sslProtocol="TLS"
  12.     truststoreFile="D:/JAVA/jdk7/jre/lib/security/cacerts"/>
然后导出证书
    假如和我一样,自己在开发中又本机又是服务器又是客户端,那么还需要将证书在导入进jdk中(不是说一定要导入jdk,但是最好是导入,因为jdk中还有大 量的其他证书认证,后面会看到tomcat中会配置指向这个证书文件,如果只有该证书,sso跑起来没问题,但是如果有像支付宝之类的其他一些认证找不到 的一些莫名其妙的错误)
    keytool -export -alias tomcat-server -storepass changeit -file server.cer -keystore server.keystore
得到server.cer,把自己当成客户端在导入证书
    keytool -import -trustcacerts -alias server -file server.cer -keystore cacerts -storepass changeit
到这一步之后,就可以服务器和子系统双开做联调了。
      (2) 关于CAS的源码,要自定义的话需要先将cas的流程走一遍,cas server端采用的spring的webflow。一系列的配置加代码流程非常的清晰,最主要看login-webflow理清流程基本上就可以自己分析出一些开发中遇到的错误和问题了。顺便说一句cas修改源码基本是修改一个小的地方结果发现自己基本上把整个流程的代码都要重写,因为他的代码都不能继承,如果需要拷出来修改完了之后再修改配置文件的引用。所以很蛋疼,不过如果需要修改他的源码一般来说肯定是自己思路出问题了,或者说代码还没有理清楚,很多东西数据都可以从他的配置文件中找到对应的类然后抽取出来。
最后把login的流程给出来:

点击(此处)折叠或打开

  1. initialFlowSetupAction
  2. ticketGrantingTicketCheck 判断是否已登录,有无已登录票据
  3. gatewayRequestCheck //外来service
  4. serviceAuthorizationCheck 判断外来访问还是直接访问cas
  5. generateLoginTicket 生成访问票据
  6. viewLoginForm 进入登录页面
  7. realSubmit 提交
  8. sendTicketGrantingTicket 发送访问票据
  9. serviceCheck 判断跳转类型
  10. generateServiceTicket 将票据放入response
先把这个流程里出来在进行后期的开发效率会很高。所谓各种的ticket跟tcp的握手差不多,类比着很好想。
(3)引入restful,会发现世界瞬间美好了,很多之前你想到的然后去系统各种抽取的东西都可以通过它来做,
直接看cas官网,或者 http://stackoverflow.com/questions/22625368/working-java-rest-client-example-to-access-cas-rest-api这篇帖子 即可。
<dependency>
        <groupId>org.jasig.cas</groupId>
        <artifactId>cas-server-integration-restlet</artifactId>
        <version>${cas.version}</version>
        <scope>runtime</scope>
        <exclusions>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-webmvc</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-context</artifactId>
            </exclusion>
            <exclusion>
                <groupId>org.springframework</groupId>
                <artifactId>spring-core</artifactId>
            </exclusion>
        </exclusions>
    </dependency>
 <servlet>
        <servlet-name>restlet</servlet-name>
        <servlet-class>org.restlet.ext.spring.RestletFrameworkServlet</servlet-class>
        <load-on-startup>1</load-on-startup>
    </servlet>

    <servlet-mapping>
        <servlet-name>restlet</servlet-name>
        <url-pattern>/v1/*</url-pattern>
    </servlet-mapping> 
(4)开放用户数据的远程调用接口,然后打包给客户端调用。
over~



<script>window._bd_share_config={"common":{"bdSnsKey":{},"bdText":"","bdMini":"2","bdMiniList":false,"bdPic":"","bdStyle":"0","bdSize":"16"},"share":{}};with(document)0[(getElementsByTagName('head')[0]||body).appendChild(createElement('script')).src='http://bdimg.share.baidu.com/static/api/js/share.js?v=89860593.js?cdnversion='+~(-new Date()/36e5)];</script>
阅读(45) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~
评论热议
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值