前言
这次从CAS Server搭建到客户端集成中间还是踩了不少坑的,比如跨域携带cookie问题,自定义验证,单点登出。我将整个过程记录下来,来让后人少踩点坑
一、拉取5.3版本的CAS代码
我拉取的是5.3.16版本
git clone https://github.com/apereo/cas-overlay-template.git
二、下载Tomcat
这里我使用的是Tomcat9
编辑
点击这里下载
然后随便放在D盘某个地方解压。
三、配置本地Https
因为http协议跨域无法携带Cookie,会导致后续接入客户端时,无限跳转登录不上,在这里需要本地搞个假https。
我偷个懒,大家可以搜相关的教程,关于怎么配置本地https的,我随便贴几个文章。
基于CAS实现单点登录(1):https的配置
cas5.3 https证书本地安装教程
建议过程中密钥密码都搞成changeit,防止一会要这个密码一会要那个密码搞乱掉。
四、启动CAS SERVER
再偷个懒,这个人写的很好。
从零开始搭建CAS
在后续对服务端进行定制化开发时,很多东西都是参考逆天壁虎的文章,包括自定义验证、Services配置等,可以看看这个作者写的CAS相关文章。
逆天壁虎主页
下面主要就是我在服务端踩的一些坑。
1、上面提到过,要么所有的服务在一个机器上,或者通过nginx代理到一个ip下,不然cas server就必须用https,只有https才能跨域携带cookie,我看有的文章是把登录成功的token放在路径里,我试了一下确实可行,但是安全性很低不建议。
我试过以下排列组合:
①cas用https域名+客户端用ip组合(前后端都在同一ip下) √
②cas用ip+客户端ip组合 √
③cas用http域名+客户端http域名 ×
不知道cas用https域名+客户端http域名可以不,我感觉应该可以。
2、Services配置了如下之后
"logoutType" : "BACK_CHANNEL",
"logoutUrl" : "http://192.168.235.32:9050/TEST/",
"attributeReleasePolicy": {
"@class": "org.apereo.cas.services.ReturnAllAttributeReleasePolicy"
},
"accessStrategy" : {
"@class" : "org.apereo.cas.services.DefaultRegisteredServiceAccessStrategy",
"enabled" : true,
"ssoEnabled" : true
}
在B系统退出登录时,A系统会收到CAS携带着当初A系统登录成功用的临时票据信息并调用该URL,一定要加上attributeReleasePolicy和accessStrategy这两部分,我看有的教程里没有,甚至我去官方文档看也没有(5.3的官方文档已经删了,可以看6开头版本的),我也没加,导致一直获取不到票据信息,客户端登出过滤器一直不好用,都快调试自闭了。
下一个文章准备写前后端分离项目(Spring boot+vue)项目的cas集成,会多贴一些代码。
话说CAS的前端登录页也太难搞了吧,各位有没有外接登录页的解决方案给我参考一下,感谢。