CAS单点登录概述

CAS单点登录概述

单点登录

单点登(Single Sign On),简称SSO,是目前比较流行的企业业务整合的解决方案之一。
SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。

CAS简介

CAS官网链接

简介

  • 英语原文
1
2
3
4
5
Enterprise Single Sign-On - CAS provides a friendly open source community   
that actively supports and contributes to the project.
While the project is rooted in higher-ed open source, it has grown to
an international audience spanning Fortune 500 companies
and small special-purpose installations.
  • 简介译文
1
2
3
企业单点登录 --- CAS提供了一个友好的开源社区,它积极地支持和贡献这个项目。  
尽管该项目植根于更高层次的开放源代码,但它已发展成为一个国际受众,包括
财富500强企业和小型特殊安装用途用户。

作用

CAS为企业提供Web单点登录服务:

  • 一个开放且拥有完整文档的协议
  • 一个开源的Java服务器组件
  • 插件化的身份验证支持(支持LDAP、数据库、X.509、2-factor等身份验证方式)
  • 支持多种协议(CAS、SAML、OAuth、OpenID)
  • 支持多种语言的客户端依赖库(Java, .Net, PHP, Perl, Apache, uPortal等)
  • 集成uPortal、BlueSocket、TikiWiki、Mule、Liferay、Moodle等框架
  • 社区文档和实现支持
  • 广泛的用户社区

基本架构

  • 系统组件

CAS系统体系架构的两个物理组件包括CAS服务器CAS客户端,它们通过各种协议进行通信。

  • CAS服务器
1
2
3
4
CAS服务器是构建在Spring框架上的Java servlet应用,其主要功能是通过发出和验证票据(tickets)对用户进行身份验证,  
并授予对启用CAS的服务(CAS客户端)的访问权。当用户成功登录后向用户发出票据授予票据(ticket-granting ticket TGT),
SSO会话在这个时候会被创建出来。服务票据(service ticket ST)以TGT作为令牌,通过用户的请求并使用浏览器重定向
发送到服务(CAS客户端)。之后CAS客户端通过反向通道通信在CAS服务器上验证ST。CAS协议文档中详细描述了这些交互过程。
  • CAS客户端
1
2
3
术语“CAS客户端”包含有两种不同的含义。CAS客户端是任何启用了CAS的应用程序,它可以通过受支持的协议与服务器通信。  
CAS客户端也是一个软件包,它可以与各种软件平台和应用程序集成,以便通过某种身份验证协议(例如CAS、SAML、OAuth)
与CAS服务器通信。CAS客户端支持多个软件平台。

CAS客户端用户验证的基本原理(Java客户端)

数据流

基本原理数据流图如下:

简单的说明:

(1) 用户请求CAS客户端服务的资源
(2) CAS客户端服务判断请求中是否包含用户会话信息,若无则重定向到CAS服务器登录页面(重定向URL携带客户端服务URL)
(3) 用户登录CAS服务器
(4) CAS服务器生成票据(ticket),以参数方式添加到客户端服务URL,将页面重定向至CAS客户端
(5) CAS客户端获取票据(ticket),调用CAS服务器进行票据校验
(6) 票据(ticket)校验成功,写入用户会话信息(JSESSIONID)
(7) 用户请求CAS客户端服务的资源(携带会话信息)
(8) CAS客户端根据会话信息,请求CAS服务器获取用户详情,并将其丰富至HTTP请求中
(9) 用户获取资源

程序逻辑

Java客户端实现CAS登录验证,需要实现业务过滤器,基本的程序流程如下:

说明:

(1) 过滤器拦截到HTTP请求
(2) 过滤器判断请求是否包含用户会话信息
(3) 若存在用户会话,则将请求通过(给其他CAS过滤器处理)
(4) 若不存在用户会话,则判断是否存在票据(ticket)参数
(5) 若存在票据(ticket),则将通过(给其他CAS过滤器处理)
(6) 若不存在票据(ticket),则生成重定向URL(携带客户端服务地址),重定向请求至CAS服务器登录页面

实例工程

实例工程包含CAS服务器war包打包模块、客户端maven工程代码等,工程仓库地址:

https://github.com/johnsonmoon/cas-example