CAS单点登录概述
单点登录
单点登(Single Sign On),简称SSO,是目前比较流行的企业业务整合的解决方案之一。
SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
CAS简介
简介
- 英语原文
1 | Enterprise Single Sign-On - CAS provides a friendly open source community |
- 简介译文
1 | 企业单点登录 --- CAS提供了一个友好的开源社区,它积极地支持和贡献这个项目。 |
作用
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 | CAS服务器是构建在Spring框架上的Java servlet应用,其主要功能是通过发出和验证票据(tickets)对用户进行身份验证, |
- CAS客户端
1 | 术语“CAS客户端”包含有两种不同的含义。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工程代码等,工程仓库地址: