Cas单点登录及spring集成shiro-cas

最近做的一个项目需要对接CAS单点登录,阅读过一些文档后。梳理CAS协议实现的单点登录。其他方式实现CAS登录对比及优劣。springboot集成shiro-cas

SSO单点登录

  • 单点登录:Single Sign On,简称SSO,SSO使得在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

应用场景

  • 分布式多系统用户集中管理
  • 用户、权限集中管理
  • 多因素认证(如微信pc端登录手机确认)

单点登录的实现方式

通过页面重定向的方式,如CAS实现的单点登录

以Cookie作为凭证媒介

CAS协议单点登录

  • 访问服务:客户端发送请求访问应用系统提供的服务资源。
  • 定向认证:客户端重定向用户请求到中心认证服务器。
  • 用户认证:用户进行身份认证
  • 发放票据:服务器会产生一个随机的 Service Ticket 。
  • 验证票据: SSO 服务器验证票据 Service Ticket 的合法性,验证通过后,允许客户端访问服务。
  • 传输用户信息: SSO 服务器验证票据通过后,传输用户认证结果信息给客户端。

cas认证流程

  1. Browser 请求应用服务器
  2. 应用服务器验证是否已登录
  3. 未登录,跳转到CAS认证server 并携带CAS回调返回地址
  4. CAS server 认证通过,回调应用服务器并返回ticket
  5. 应用服务器根据ticket,再次请求CAS Server 来验证ticket的合法性
  6. ticket合法,则通过认证。应用服务器跳转到登录成功页面

CAS登录Example

  1. 访问:http://localhost:8081/home
  2. 跳转至:https://localhost:8443/cas/login?service=http://localhost:8081/cas
  3. 输入正确用户名密码登录跳转回:http://localhost:8081/cas?ticket=ST-203-GUheN64mOZec9IWZSH1B-cas01.example.org
  4. 最终跳回:http://localhost:8081/home

CAS登出Example

  1. 访问:http://localhost:8081/logout
    2.跳转至:https://localhost:8443/cas/logout?service=http://localhost:8081
  2. 由于未登录,又执行登录步骤,所以最终返回https://localhost:8443/cas/login?service=http://localhost:8081/cas
  3. 这次登录成功后返回: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


springboot 整合shiro-cas认证
springboot 整合shiro-cas认证