前言
在工作中,随着接触的项目越来越多,不同的开发语言,不同的部署系统,不同的项目都要维护自己的用户认证系统,有没有一种好的解决方案来解决这个痛点呢?答案肯定是有的,那就是业界鼎鼎有名的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认证服务系统,了解了其中的认证原理,但是如何跟我们的业务系统整合在一起呢?下一篇我们将动手实战这一系统。