最近做的一个项目需要对接CAS单点登录,阅读过一些文档后。梳理CAS协议实现的单点登录。其他方式实现CAS登录对比及优劣。springboot集成shiro-cas
SSO单点登录
- 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
应用场景
- 分布式多系统用户集中管理
- 用户、权限集中管理
- 多因素认证(如微信pc端登录手机确认)
单点登录的实现方式
通过页面重定向的方式,如CAS实现的单点登录
以Cookie作为凭证媒介
CAS协议单点登录

- 访问服务:客户端发送请求访问应用系统提供的服务资源。
- 定向认证:客户端重定向用户请求到中心认证服务器。
- 用户认证:用户进行身份认证
- 发放票据:服务器会产生一个随机的 Service Ticket 。
- 验证票据: SSO 服务器验证票据 Service Ticket 的合法性,验证通过后,允许客户端访问服务。
- 传输用户信息: SSO 服务器验证票据通过后,传输用户认证结果信息给客户端。
cas认证流程
- Browser 请求应用服务器
- 应用服务器验证是否已登录
- 未登录,跳转到CAS认证server 并携带CAS回调返回地址
- CAS server 认证通过,回调应用服务器并返回ticket
- 应用服务器根据ticket,再次请求CAS Server 来验证ticket的合法性
- ticket合法,则通过认证。应用服务器跳转到登录成功页面
CAS登录Example
- 访问:http://localhost:8081/home
- 跳转至:https://localhost:8443/cas/login?service=http://localhost:8081/cas
- 输入正确用户名密码登录跳转回:http://localhost:8081/cas?ticket=ST-203-GUheN64mOZec9IWZSH1B-cas01.example.org
- 最终跳回:http://localhost:8081/home
CAS登出Example
- 访问:http://localhost:8081/logout
2.跳转至:https://localhost:8443/cas/logout?service=http://localhost:8081 - 由于未登录,又执行登录步骤,所以最终返回https://localhost:8443/cas/login?service=http://localhost:8081/cas
- 这次登录成功后返回:http://localhost:8081/
spring 整合shiro-cas 认证
- 在shiro的1.3版本后官方不建议使用shiro-cas包做CAS单点登录。整合了pac4j来实现单点登录,pac4j是一个支持多种支持多种协议的身份认证的Java客户端。它有一个非常简单和统一的API以支持以下这6个客户端认证机制:OAuth、CAS、HTTP、OpenID、SAML (2.0)、Google App Engine UserService.、OpenID Connect 1.0
