一什么是单点登录(sso)
用户一次登录可以访问所有互相信任的应用系统
传统的session无法在系统分别部署到不同的服务器中使用
二什么是CAS
是实现SSO单点登录的框架
点击进入CAS官网:
特点
- 开源企业级单点登录解决方案
- CAS Service(CAS服务端): 是需要独立部署的Web应用
- CAS Client(CAS客户端): 支持非常多的客户端(java,PHP…)
三CAS Server
前置准备 jdk,tomcat的安装和环境变量的配置
3.1下载与部署cas的war包
链接:百度网盘 请输入提取码
提取码:6nzn
下载cas.war
后将其放入到tomcat的安装目录中的 apache-tomcat-8.5.72\webapps
文件夹下:
**
3.2启动tomcat查看cas Server是否安装成功
进入tomcat的安装目录中bin
文件夹下
Windows系统双击 startup.bat
自动弹出黑窗口:
第一次加载有的小伙伴可能加载的慢一些,
注意不要对黑窗口 敲击回车 否则会暂停窗口
出现READY
表示加载完成
浏览器输入 http://localhost:8080/cas/login
回到tomcat的安装目录我们会发现webapps
文件夹下多了个cas
文件夹
进入tomcat的安装目录中webapps\cas\WEB-INF\classes
打开application.properties
文件
在最后一行找到我们需要的用户名和密码
用户名 casuser
密码 Mellon
回到浏览器输入后登陆成功!
3.3CAS Server其它功能演示
在tomcat的安装目录中webapps\cas\WEB-INF\classes\webflow
中有login
和logout
文件夹
我们大胆猜测logout
文件夹是管理登出功能的
浏览器输入 http://localhost:8080/cas/logout
回过头来看webapps\cas\WEB-INF\classes\application.properties
文件
四CAS 客户端
点击下载我的源码
SpringBoot2+SpringSecurity+CAS: SpringBoot2+SpringSecurity+CAS实现单点登录的客户端
这里是
SpringBoot2+SpringSecurity+CAS 安全认证整合项目
启动后访问http://localhost:7200/
发现浏览器自动跳转到
http://127.0.0.1:8080/cas/login?service=http%3A%2F%2Flocalhost%3A7200%2Flogin
但是报了个错误
解决方法:
在tomcat的安装目录中cas\WEB-INF\classes\application.properties
添加如下
<span style="color:#333333"><span style="background-color:#f9f5e9"><code>cas.tgc.secure=false
cas.serviceRegistry.initFromJson=true
</code></span></span>
重启CAS服务端和客户端
发现报出如下错误
解决方法
cas服务4后服务端默认是https协议的配置文件,而我们浏览器是http的需要修改它
路径cas\WEB-INF\classes\services\HTTPSandIMAPS-10000001.json
<span style="color:#333333"><span style="background-color:#f9f5e9"><code> {
"@class" : "org.apereo.cas.services.RegexRegisteredService",
// "serviceId" : "^(https|imaps)://.*",
"serviceId" : "^(https|http|imaps)://.*",
"name" : "HTTPS and IMAPS",
"id" : 10000001,
"description" : "This service definition authorizes all application urls that support HTTPS and IMAPS protocols.",
"evaluationOrder" : 10000
}
</code></span></span>
重启CAS服务端和客户端
输入用户名密码
用户名 casuser
密码 Mellon
登出http://localhost:7200/logout
登出后输入http://localhost:7200/hello
发现自动跳转到登录页面
五CAS 认证流程
在开始前先了解几个名词
user用户
Browser浏览器
CAS Server 服务器
Protected App 应用1
Protected App 应用2
TGC 存放用户身份认证凭证的cookie,在浏览器和CAS Server间通讯时使用,是CAS Server用来明确用户身份的凭证。TGT封装了TGC值以及此Cookie值对应的用户信息.
TGT:TGT对象的ID就是TGC的值,在服务器端,通过TGC查询TGT。
ST:service ticket,CAS为用户签发的访问某一service的票据,ST是TGT签发的。
全局会话:未完
局部会话: 未完
解释一下这张官网流程图
- 用户通过浏览器访问应用1, 应用1发现用户未登录,返回302,并携带上一个service参数,让用户到CAS Server上登录
- 浏览器自动重定向到CAS Server上, CAS Server获取用户Cookie中携带的TGC,去校验用户是否登录
如果已经登录,则完成身份验证(此时CAS Server可以根据用户的TGC找TGT,进而获取用户信息)
如果未登录,则重定向到CAS Server的登录页面,用户输入用户名/密码,CAS Server生成TGT,根据TGT签发一个ST,将TGC放在用户的cookie中,完成身份校验 - CAS Server 完成身份校验之后,会将 ST 拼接在 service 中,返回 302,浏览器将首先将 TGC 存在 Cookie 中,然后根据 302 的指示,携带上 ST 重定向到应用1。
- 应用1 收到浏览器传来的 ST 之后,拿去 CAS Server 上校验,去判断用户的登录状态,如果用户登录合法,CAS Server 就会返回用户信息给 应用1。
- 浏览器再去访问应用2,应用2 发现用户未登录,重定向到 CAS Server。
- CAS Server 发现此时用户实际上已经登录了,于是又重定向回应用2,同时携带上 ST。
- 应用2 拿着 ST 去 CAS Server 上校验,获取用户的登录信息
六登出
七与token的区别
CAS Server需要存储TGC
而 Token不存储在服务端
2.Token支持跨域单点登录