单点登录 SSO
1. 什么是SSO
SSO是single sign on,即单点登录,是目前流行的企业业务整合方案之一。它提供一种用户只需要登录一次就可以访问互相信任的应用系统
2. 为什么使用SSO
提高用户效率,不必多次登录系统,也不必记住多个用户名密码。
提高开发者效率,接入sso的应用不需要自己写登录模块,
3. SSO登录表象
sso登录体系三种角色:User(多个),Web(多个), SSO认证中心(1个)。
web应用不处理User登录,所有的登录都是在SSO认证中心中进行
sso认证中心通过某些方法来告诉Web应用当前访问的用户是否可以继续访问应用
sso认证中心和所有的web应用建立一种信任关系。sso认证中心对用用户身份正确性的判断通过某种防范告诉web应用,并且判定结果被web应用信任。
客户第一次通过浏览器登录appA,请求会重定向到登录页面,认证通过后进入到appA系统。之后用户再登录appB,就直接进入appB的页面。
4. 基于CAS实现SSO登录原理
CAS Client 与受保护的客户端应用部署在一起,以 Filter 方式保护 Web 应用的受保护资源,过滤从客户端过来的每一个 Web 请求,同时, CAS Client 会分析 HTTP 请求中是否包含请求 Service Ticket( ST 上图中的 Ticket) ,如果没有,则说明该用户是没有经过认证的;于是 CAS Client 会重定向用户请求到 CAS Server ( Step 2 ),并传递 Service (要访问的目的资源地址)。 Step 3 是用户认证过程,如果用户提供了正确的 Credentials , CAS Server 随机产生一个相当长度、唯一、不可伪造的 Service Ticket ,并缓存以待将来验证,并且重定向用户到 Service 所在地址(附带刚才产生的 Service Ticket ) , 并为客户端浏览器设置一个 Ticket Granted Cookie ( TGC ) ; CAS Client 在拿到 Service 和新产生的 Ticket 过后,在 Step 5 和 Step6 中与 CAS Server 进行身份核实,以确保 Service Ticket 的合法性。
在该协议中,所有与 CAS Server 的交互均采用 SSL 协议,以确保 ST 和 TGC 的安全性。协议工作过程中会有 2 次重定向 的过程。但是 CAS Client 与 CAS Server 之间进行 Ticket 验证的过程对于用户是透明的(使用 HttpsURLConnection )。
CAS 系统中名词术语解释 TGC 、 ST 、 PGT 、 PGTIOU 、 PT 。
Ticket-granting cookie(TGC) :存放用户身份认证凭证的 cookie ,在浏览器和 CAS Server 间通讯时使用,并且只能基于安全通道传输( Https ),是 CAS Server 用来明确用户身份的凭证;
Service ticket(ST) :服务票据,服务的惟一标识码 , 由 CAS Server 发出( Http 传送),通过客户端浏览器到达业务服务器端;一个特定的服务只能有一个惟一的 ST ;
Proxy-Granting ticket ( PGT ):由 CAS Server 颁发给拥有 ST 凭证的服务, PGT 绑定一个用户的特定服务,使其拥有向 CAS Server 申请,获得 PT 的能力;
Proxy-Granting Ticket I Owe You ( PGTIOU ) : 作用是将通过凭证校验时的应答信息由 CAS Server 返回给 CAS Client ,同时,与该 PGTIOU 对应的 PGT 将通过回调链接传给 Web 应用。 Web 应用负责维护 PGTIOU 与 PGT 之间映射关系的内容表;
Proxy Ticket (PT) :是应用程序代理用户身份对目标程序进行访问的凭证;
其它说明如下:
Ticket Granting ticket(TGT) :票据授权票据,由 KDC 的 AS 发放。即获取这样一张票据后,以后申请各种其他服务票据 (ST) 便不必再向 KDC 提交身份认证信息 (Credentials) ;
Authentication service(AS) --------- 认证用服务,索取 Credentials ,发放 TGT ;
Ticket-granting service (TGS) --------- 票据授权服务,索取 TGT ,发放 ST ;
KDC( Key Distribution Center ) ---------- 密钥发放中心;
博客参考 http://blog.chinaunix.net/uid-22816738-id-3525939.html
https://www.itlipeng.cn/?p=767
http://www.coin163.com/java/cas/cas.html