1.简介
SSO单点登录
在多个相互信任的系统中,用户只需要登录一次就可以访问其他受信任的系统。
新浪微博与新浪博客是相互信任的应用系统。
*当用户首次访问新浪微博时,新浪微博识别到用户未登录,将请求重定向到认证中心,认证中心也识别到用户未登录,则将请求重定向到登录页。
*当用户已登录新浪微博访问新浪博客时,新浪博客识别到用户未登录,将请求重定向到认证中心,认证中心识别到用户已登录,返回用户的身份,此时用户无需登录即可使用新浪博客。
*只要多个系统使用同一套单点登录框架那么它们将是相互信任的。
CAS
Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法, CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。
CAS包含CAS Client 和 CAS Server两部分
CAS Client:要使用单点登录的Web应用,将与同组下的Web应用构成相互信任的关系,只需在web应用中添加CAS提供的Listener和Filter即可成为CAS Client ,其主要负责对客户端的请求进行登录校验、重定向和校验ticket工作。
CAS Server:主要负责对用户的用户名/密码进行认证,颁发票据等,需要单独的进行部署。
*同组下的任意一个Web应用登录后其他应用都不需要登录即可使用。
2.CAS服务器搭建
2.1 去CAS官网下载CAS源码包
将下载的源码包中的cas-server-webapp工程导入ide中,将工程打包为war包,直接放入tomcat下的webapp中运行。
*CAS 5.0版本以上需要jdk1.8和gradle进行构建、4.X版本使用maven进行构建(maven 3.3+)
2.2 在Tomcat中开启HTTPS协议
*由于CAS Server默认使用HTTPS协议进行访问,因此需要在Tomcat中开启HTTPS协议。
1.使用JDK提供的keytool命令生成秘钥库。
2.修改tomcat配置并开启8443端口
在tomcat/conf/server.xml中添加:
2.3 进入CAS认证中心
*由于首次访问,客户端浏览器进程所占用的内存中不存在TGC Cookie,所以CAS Server认为用户未进行登录,因此将请求转发到登录页面。
*默认账号:casuser/Mellon
*当登录后再次访问登录处理时,将会直接转发到已登录页面。
*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.通过HTTP请求分别通知当前用户所有已登录的CAS Client进行注销登录操作,销毁用户对应的Session对象。
*当注销成功后,此时再访问登录页面时需重新登录。
2.4 修改为自定义数据源
1.修改cas-server-webapp/WEB-INF/deployerConfigContext.xml
注释配置:
新增配置:
2.在cas-server-webapp/WEB-INF/lib包中添加:cas-server-support-jdbc.jar、mysql-connector-java.jar
2.5 修改为HTTP方式访问
1.修改cas-server-webapp/WEB-INF/cas.properties
tgc.secure=falsewarn.cookie.secure=false
2.修改cas-server-webapp/WEB-INF/classes/services/HTTPSandIMAPS-10000001.json
"serviceId" : "^(https|imaps|http)://.*"
*修改serviceId的值即可。
3.删除cas-server-webapp/WEB-INF/view/jsp/default/ui/casLoginView.jsp页面中校验是否是HTTPS协议的标签块。