CAS单点登录从入门到部署

一、初识CAS
首先我们来说一下CAS,CAS全称为Central Authentication Service即中央认证服务,是一个企业多语言单点登录的解决方案,并努力去成为一个身份验证和授权需求的综合平台。

CAS是由Yale大学发起的一个企业级的、开源的项目,旨在为Web应用系统提供一种可靠的单点登录解决方法(属于 Web SSO )。

CAS协议至少涉及三方:客户端Web浏览器,请求身份验证的Web应用程序和CAS服务器。 它也可能涉及后端服务,如数据库服务器,它没有自己的HTTP接口,但与Web应用程序进行通信。

主要特征:
多种的协议的支持,包括CAS (v1、v2、v3)、SAML(v1、v2)、OAuth、OpenID、OpenID Connect和WS-Federation Passive Requestor

多种认证机制,可以通过JAAS,LDAP,RDBMS,X.509,Radius,SPNEGO,JWT,Remote,Trusted,BASIC,Apache Shiro,MongoDB,Pac4J等进行身份验证

可以通过WS-FED,Facebook,Twitter,SAML IdP,OpenID,OpenID Connect,CAS等代理委派认证

多种形式的授权包括ABAC, Time/Date, REST, Internet2’s Grouper等

同时也支持HAZELCAST、EHCache、JPA、MycCache、Apache IGITE、MangGDB、ReDIS、DimoDoB、Couchbase等实现高可用多个集群部署

各种丰富的客户端,像常见的Java、Python、Node、PHP、C#、Perl等等

Github: https://github.com/apereo/cas

下载链接:https://github.com/apereo/cas/tags

开发文档:https://apereo.github.io/cas/5.2.x/index.html

官网:https://www.apereo.org/projects/cas

二、SSO
1、SSO简介
单点登录( Single Sign-On , 简称 SSO )是多个相关但独立的软件系统访问控制的一个属性。通过使用该属性,用户登录与单个ID和密码来访问所连接的一个或多个系统,而不使用不同的用户名或密码,或在某些配置中无缝登录在每个系统上,它是比较流行的服务于企业业务整合的一种解决方案。总结一句话,SSO 使得在多个应用系统中,用户只需要 **登录一次 **就可以访问所有相互信任的应用系统。

举个栗子:阿里巴巴旗下的淘宝网,你在浏览器里登录了,打开阿里云或者天猫就会发现可以不用在登录了,这里就是使用了SSO。

在SSO体系中,主要包括三部分:

User (多个)
Web 应用(多个)
SSO 认证中心( 1 个)
而SSO的实现基本核心原则如下:

所有的登录都在 SSO 认证中心进行
SSO 认证中心通过一些方法来告诉 Web 应用当前访问用户究竟是不是已通过认证的用户
SSO 认证中心和所有的 Web 应用建立一种信任关系, SSO 认证中心对用户身份正确性的判断会通过某种方法告之 Web 应用,而且判断结果必须被 Web 应用信任。
2、SSO原理
2.1 、登录
上面介绍我们知道,在SSO中有一个独立的认证中心,只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。那其他的系统如何访问受保护的资源?这里就是通过认证中心间接授权通过令牌来实现,当SSO验证了用户信息的正确性后,就会创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。

上面是一张SSO登录原理图,下面我们来分析一下具体的流程:

首先用户访问系统1受保护的资源,系统1发现未登陆,跳转至SSO认证中心,并将自己的参数传递过去
SSO认证中心发现用户未登录,将用户引导至登录页面
用户输入用户名和密码提交至SSO认证中心
SSO认证中心校验用户信息,创建用户与SSO认证中心之间的会话,称为全局会话,同时创建授权令牌
SSO认证中心带着令牌跳转会最初的请求地址(系统1)
系统1拿到令牌,去SSO认证中心校验令牌是否有效
SSO认证中心校验令牌,返回有效,注册系统1的地址
系统1使用该令牌创建与用户的会话,称为局部会话,返回给用户受保护资源
用户访问系统2受保护的资源
系统2发现用户未登录,跳转至SSO认证中心,并将自己的地址作为参数传递过去
SSO认证中心发现用户已登录,跳转回系统2的地址,并附上令牌
系统2拿到令牌,去SSO认证中心校验令牌是否有效
SSO认证中心校验令牌,返回有效,注册系统2地址
系统2使用该令牌创建与用户的局部会话,返回给用户受保护资源
用户登录成功之后,会与SSO认证中心及各个子系统建立会话,用户与SSO认证中心建立的会话称为全局会话,用户与各个子系统建立的会话称为局部会话,局部会话建立之后,用户访问子系统受保护资源将不再通过SSO认证中心,全局会话与局部会话有如下约束关系:

局部会话存在,全局会话一定存在
全局会话存在,局部会话不一定存在
全局会话销毁,局部会话必须销毁
2.2 、注销
既然有登陆那么就自然有注销,单点登录也要单点注销,在一个子系统中注销,所有子系统的会话都将被销毁。原理图如下:

SSO认证中心一直监听全局会话的状态,一旦全局会话销毁,监听器将通知所有注册系统执行注销操作

同样的我们也来分析一下具体的流程:

用户向系统1发起注销请求
系统1根据用户与系统1建立的会话id拿到令牌,向SSO认证中心发起注销请求
SSO认证中心校验令牌有效,销毁全局会话,同时取出所有用此令牌注册的系统地址
SSO认证中心向所有注册系统发起注销请求
各注册系统接收SSO认证中心的注销请求,销毁局部会话
SSO认证中心引导用户至登录页面
上面的关于SSO原理部分参考单点登录原理与简单实现,如果不太理解可以去看看原文,作者写得很详细。

三、CAS 的基本原理
1、结构体系
在上面的文章中,我们介绍过,在CAS的结构中主要分两部分,一部分是CAS Server,另一部分是CAS Client。

CAS Server:CAS Server 负责完成对用户的认证工作 , 需要独立部署 , CAS Server 会处理用户名 / 密码等凭证(Credentials)。

CAS Client:负责处理对客户端受保护资源的访问请求,需要对请求方进行身份认证时,重定向到 CAS Server 进行认证。(原则上,客户端应用不再接受任何的用户名密码等 Credentials )。

2、CAS协议
CAS协议是一个简单而强大的基于票据的协议,它涉及一个或多个客户端和一台服务器。即在CAS中,通过TGT(Ticket Granting Ticket)来获取 ST(Service Ticket),通过ST来访问具体服务。

其中主要的关键概念:

TGT(Ticket Granting Ticket)是存储在TGCcookie中的代表用户的SSO会话。
该ST(Service Ticket),作为参数在GET方法的URL中,代表由CAS服务器授予访问CA

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值