基于CAS原理的单点登录扩展
一、背景
单点登录(Single Sign On),简称为 SSO,是现在比较流行的应用整合和综合登录控制的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。
开源的单点登录解决方案如CAS是比较成熟的,功能也十分强大。但是单点应用在共享系统访问时往往会带来权限问题。如:各应用的权限配置不是统一的,用户或许能够通过单点登录来获取不应拥有高级别的信息,不利用用户权限的控制;不能配置单点登录和本地登录,这意味在客户现场部署项目应用时,需要为其配置一个单点登录系统,增加了项目的复杂程度;单点登录的设计初衷在于共享权限,每个应用的授权均需要单点登录的鉴权才行,当用户或者应用系统过多时,会造成单点登录系统的负载过大,当出现单点登录宕机时,就会面临着所有使用该单点的应用无法访问的问题,影响各应用系统的可用性;单点登录的代码配置比较复杂,且对于应用系统有侵入性,不利于老系统加入到SSO中;当单点登录宕机时,各系统由于无法获得授权,造成系统无法正常访问,虽然可以通过配置多单点登录来解决,但是仍在单点系统中,无法灵活的在项目中去除单点的配置。
二、原理
CAS的原理:http://www.zgeo.work:8022/wordpress/cas-dandiandengluyuanli/
扩展CAS的原理:用户A 首次访问应用A时,应用A验证用户A有没有获得访问权限(前端Cookie)。如果没有获取的访问权限,则应用A根据配置来获取系统使用的时本地登录还是SSO登录,如果是SSO登录(如果是本地登录则跳转至应用A的登录页即可,用户输入用户名和密码进行信息验证,验证通过后,则在应用A系统中为浏览器颁发一个Session,用户再次访问时来验证,Session是否有效),则将页面带上本地的URL重定向至SSO A,用户A通过输入账户名和密码来登录,当登录完成后,SSO A根据浏览器中本地的URL来重定向至应用A的访问页面,并在重定向时并带上SSO A颁发TGT票据,应用A通过URL获取到TGT票据,在后台向SSO A发送请求进行TGT票据验证,(若验证成功则应用A显示访问URL的页面,若没有验证成功,则再次重定向至SSO A重新输入用户名和密码进行鉴权),SSO A获取到应用A发出请求(HTTP/HTTPS)中的TGT票据,SSO A在系统内的票据库中验证票据是否存在,(如果存在则验证成功,如果不存在则验证失败,并将信息发送给应用A),当TGT票据验证成功后,则立即删除TGT票据,防止中间人获取TGT票据后,进行非法验证。应用A获取到验证成功的信息后,在应用A系统中为浏览器颁发一个Session。当用户A再次访问应用A时,应用A判断Session是否过期即可,不再用SSO A进行鉴权和通信(当Session存在则验证通过,如不存在则需要重新登陆系统)。如果配置实时验证,则不生成Session,每一步页面刷新均到SSO上进行验权。
扩展所具备的独特功能:
1、基于配置的本地登录与SSO登录相结合,可以自由切换登录类型。
2、对系统不具有侵入性,只需要加入maven即可,使用配置激活登录类型(默认本地登录和SSO 登录均关闭)。
3、进行应用绑定。任何一个使用本地登录的应用,均可以当作SSO系统进行鉴权。如:有SSO A,应用A,应用B,应用C。若应用A、B、C的SSO均指向SSO A,则用户在应用A、B、C的权限一致。若A配置本地登录,B的SSO均指向A,则应用A、应用B共享权限。
4、SSO应用一体化,便于维护,不分SSO客户端和SSO服务端,打包方式不同,SSO鉴权可以独立以应用方式部署也可以依赖应用部署。
5、加密通信,验权即毁。信息传输使用HTTPS通信,数据进行AES加密,TGT票据验证之后,即可销毁。
6、可以配置实时权限。用来统一登出及权限更新,本地应用不存储验证信息,统一交由SSO系统发送TGT票据验证用户信息。
7、本地登录定制化登录页。可以将登录页复制到项目中直接修改即可。本地登录页会自动覆盖公共登录页,便于定制化开发。
三、实际应用
本扩展功能不使用CAS进行搭建,直接按照上述CAS原理进行独立构建。
本扩展功能已独立成portal应用http://zgeo.work/portal/