CAS单点登录(SSO)实战(一)

4,476 阅读3分钟

前言

在工作中,随着接触的项目越来越多,不同的开发语言,不同的部署系统,不同的项目都要维护自己的用户认证系统,有没有一种好的解决方案来解决这个痛点呢?答案肯定是有的,那就是业界鼎鼎有名的sso单点登录系统,也许你很早就听过这个词,但是只闻其声,不知其意,下面我们就将一起实战一次cas单点登录系统话不多说,我们开始吧。

环境准备

  • jdk1.8
  • maven3.x
  • centos7.x
  • tomcat8.0

HTTPS证书准备

  • 生成server.keystore
    alias: 别名 这里起名tomcat
    keyalg: 证书算法,RSA
    keystore:证书生成的目标路径和文件名
    keypass:密钥保护密码
    storepass:存储密码
keytool -genkey -alias tomcat -keyalg RSA -keypass 123456 -storepass 123456 -keystore tomcat.keystore -validity 3600
  • 生成证书server.cer
 keytool -export -trustcacerts -alias tomcat -file server.cer -keystore tomcat.keystore -storepass 123456

  • 导入证书
    看到下面的提示Certificate was added to keystore导入成功 其中-storepass changeit中 changeit即为默认密码和前面设置的密码没有关系
keytool -import -trustcacerts -alias tomcat -keystore "/home/jdk1.8.0_171/jre/lib/security/cacerts" -file "/root/software/server.cer" -storepass changeit
  • 删除证书(如果需要)
keytool -delete -alias tomcat -keystore "/home/jdk1.8.0_171/jre/lib/security/cacerts" -storepass changeit

Tomcat配置Https

  • 编辑
vi /root/software/apache-tomcat-8.5.37/conf/server.xml
加入配置项
 <Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
      maxThreads="150" SSLEnabled="true" scheme="https" secure="true"
     clientAuth="false" sslProtocol="TLS" keystoreFile="tomcat.keystore" keystorePass="123456"  />
  • 启动tomcat测试8443端口
./bin/startup.sh 

在浏览器中输入https//ip:8443测试端口

下载CAS系统

地址 github.com/apereo/cas-…
这里选择5.3版本,因为从6.0版本开始项目改用的gradle编译了,个人对maven比较熟悉所以选择了5.3版本,另外没有科学上网的话,gradle依赖的jar是没法下载的

下载、解压

wget https://github.com/apereo/cas-overlay-template/archive/5.3.zip
unzip 5.3.zip 

如果没有安装unzip命令 使用如下命令安装

yum install -y unzip zip

进入解压后的文件,编译打包文件,等待完成

mvn package 

打包完成后

启动cas项目

将编译好的war包放到tomcat下的webapps下启动tomcat

cd /root/software/cas-overlay-template-5.3/target
cp cas.war /root/software/apache-tomcat-8.0.53/webapps/
cd /root/software/apache-tomcat-8.0.53
 ./bin/startup.sh  

使用默认的账号/密码 casuser/Mellon

登录成功

注销成功

另外还可以采用http方式访问 ip:8080/cas

原理:

当我们第一次访问系统时,客户端浏览器进程所占用的内存中不存在TGC Cookie,所以CAS Server认为用户未进行登录,因此将请求转发到登录页面,当登录后再次访问登录处理时,将会直接转发到已登录页面.

CAS Server根据Cookie(TGC是否能匹配TGT)来判断用户是否已登录过,默认情况下TGC Cookie位于浏览器进程所占用的内存中,因此当关闭浏览器时Cookie失效(TGC失效),此时再访问CAS登录页面将需要重新登录,当CAS服务器重启时,TGT将会失效(位于服务器内存),此时也需要重新进行登录.

当用户登录后,CAS Server会维护TGT与用户身份信息的关系,所有CAS Client可以从CAS Server中获取当前登录的用户的身份信息.

在已登录的状态下访问注销地址将会提示注销成功,其经过以下步骤:

1.清除保存在客户端浏览器的TGC Cookie(设空).

2.清除保存在服务器的TGT.

3.销毁所有CAS Client的Session对象.

当注销成功后,此时再访问登录页面时需重新登录.

总结

经过我们自己动手亲自搭建,已经完成了一个基本的cas认证服务系统,了解了其中的认证原理,但是如何跟我们的业务系统整合在一起呢?下一篇我们将动手实战这一系统。