CAS单点登录原理及CAS v5.2.4环境搭建

SSO 单点登录:

单点登录(Single Sign On),简称为 SSO,是目前比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

我们目前的系统存在诸多子系统,而这些子系统是分别部署在不同的服务器中,那么使用传统方式的session是无法解决的,我们需要使用相关的单点登录技术来解决。

CAS 认证服务中心
CAS(Central Authentication Service)单点登录,包含两个部分: CAS Server 和 CAS Client。CAS Server 需要独立部署,主要负责对用户的认证工作;CAS Client 负责处理对客户端受保护资源的访问请求,需要登录时,重定向到 CAS Server。

下图是 CAS 最基本的协议过程:
这里写图片描述

SSO单点登录访问流程

1. 访问服务:SSO客户端发送请求访问应用系统提供的服务资源。

2. 定向认证:SSO客户端会重定向用户请求到SSO服务器。

3. 用户认证:用户身份认证。

4. 发放票据:SSO服务器会产生一个随机的Service Ticket。

5. 验证票据:SSO服务器验证票据Service Ticket的合法性,验证通过后,允许客户端访问服务。

6. 传输用户信息:SSO服务器验证票据通过后,传输用户认证结果信息给客户端。

通俗理解

Center:CAS 认证中心
A:某应用服务
B:另一个应用服务

Ticket Granted Ticket ( TGT ):全局票
Ticket Granted Cookie ( TGC ): 存放 TGT id 的 cookie
Service Ticket ( ST ):某个服务的票据

用户访问 A
A:登录了吗(cookie 中的 SessionId),没有,有票吗(ST),没有,那去 Center 吧(携带了的url,一会还得回来呢)
Center:有全局票吗(TGC 中的 TGT id,不是 SessionId),没有,那你登录吧。。。
Center:登录成功,创建TGT,并将 TGT 的 id 写到用户的 cookie(TGC)中,同时生成一个随机的 ST 让用户重定向到 A 的 url
A:登录了吗(cookie 中的 SessionId),没有,有票吗(ST),有,A去 Center 验证 ST 有效性,有效,创建 Session,并将 SessionId 写到用户 cookie 里,用户以后就用该 SessionId 与 A 进行通信

用户访问 B
B:登录了吗(cookie 中的 SessionId),没有,有票吗(ST),没有,那去 Center 吧(携带B的url,一会还得回来呢)
Center:有全局票吗(TGC 中的 TGT id,不是 SessionId),有
Center:生成一个随机的 ST 让用户重定向到 B 的 url
B:登录了吗(cookie 中的 SessionId),没有,有票吗(ST),有,B 去 Center 验证 ST 有效性,有效,创建 Session,并将 SessionId 写到用户 cookie 里,用户以后就用该 SessionId 与 B 进行通信

用户登出 A
A 删除Session 并清除用户的 Cookie 中的 SessionId
A 通知 Center 用户登出了
Center 删除 TGT 并清除用户的 TGC(存放 TGT id 的 cookie)
Center 通知所有该用户访问的应用
各个应用删除Session 并清除用户的 Cookie 中的 SessionId

实战演练 以CAS 5.2.4版本为例

证书 - https必备

生成证书

#生成证书保存到D盘的keystore
keytool -genkey -alias tomcat -keyalg RSA -keystore D:/keystore
#生成证书的时候,记住cas的域名必须保持一致

导出证书

#导出证书tomcat.cer,证书生成在 D盘
keytool -export -trustcacerts -alias tomcat -file D:/tomcat.cer -keystore D:/keystore

导入证书到jdk

keytool -import -trustcacerts -alias tomcat -file D:/tomcat.cer -keystore "C:/Program Files/Java/jdk1.8.0_162/jre/lib/security/cacerts"
# 输入密码报错   keytool 错误: java.io.IOException: Keystore was tampered with, or password was incorrect
注意 这里不是证书的密码,而是jdk的默认保护密码 :changeit
#信任证书后报错  keytool 错误: java.io.FileNotFoundException: C:\Program Files\Java\jdk1.8.0_162\jre\lib\security\cacerts (拒绝访问。)
注意  这里需要以管理员的方式运行

查看证书

#查看jdk目录下的证书
keytool -list -v -keystore "C:/Program Files/Java/jdk1.8.0_162/jre/lib/security/cacerts"

编译war包

1、官网下载项目
https://github.com/apereo/cas-overlay-template

2、导入maven项目 到myeclipse

3、修改pom.xml
比如 cas版本修改为:<cas.version>5.2.x</cas.version>

离线下载cas-server-webapp-tomcat.war文件
https://oss.sonatype.org/content/repositories/releases/org/apereo/cas/cas-server-webapp-tomcat/

4、编译并查看war包

Run As -> maven install

生成的war包:target->cas.war

配置Tomcat

1、拷贝war包到tomcat的webapp目录

注意:tomcat版本低于8.0是启动不起来的

2、配置server.xml 这里配置为8443端口

<Connector port="8443" protocol="HTTP/1.1"  
               minSpareThreads="5" maxSpareThreads="75"    
               enableLookups="true" disableUploadTimeout="true"      
               acceptCount="100"  maxThreads="200"    
               scheme="https" secure="true" SSLEnabled="true"    
               clientAuth="false" sslProtocol="TLS"    
               keystoreFile="D:/keystore"      
               keystorePass="123456"/>

3、启动,并登录web验证

https://127.0.0.1:8443/cas/login

默认账号:casuser默认密码:Mellon 目前的配置仅有这一个用户
这里写图片描述

CAS服务端部署
https://segmentfault.com/a/1190000013844049
官方文档:https://apereo.github.io/cas/5.2.x/index.html
官方下载:https://github.com/apereo
cas war下载:https://oss.sonatype.org/content/repositories/releases/org/apereo/cas/cas-server-webapp-tomcat/

参考文章:
原理解析:https://www.cnblogs.com/lihuidu/p/6495247.html
原理和实现:https://blog.csdn.net/qq_24708791/article/details/78535565
cas系列:http://www.cnblogs.com/zzhuyongxin/tag/cas/
实战:https://blog.csdn.net/zzq900503/article/category/6692471
cas5.2实战:https://blog.csdn.net/yelllowcong/article/category/7347371

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值