SSO单点登录(CAS)

                                                                               SSO单点登录

一、什么是SSO

         单点登录( Single Sign-On , 简称 SSO )是指在多个应用系统中,用户只需要登录一次就可以访问所有相互信任的应用系统。它包含多个用户,多个应用,1个SSO认证服务三种角色。SSO 实现模式多种多样,但要包括以下三个原则:

1、所有的认证登录都在 SSO 认证中心进行;

2、SSO 认证中心通过一些方法来告诉 Web 应用当前访问用户究竟是不是已通过认证的用户;

3、SSO 认证中心和所有的 Web 应用建立一种信任关系,也就是说 web 应用必须信任认证中心。(单点信任)

二、CAS企业级单点登录框架

CAS(Central Authentication Service中央认证服务) Yale 大学发起的一个开源项目,旨在为 Web 应用系统提供一种可靠的单点登录方法,CAS 在 2004 年 12 月正式成为 JA-SIG 的一个项目。

CAS 包括两部分: CAS Server 和 CAS Client 。实现流程如图:

1.架构笨重

2.基于JAVA安全证书的 https 访问,需要购买证书。

三、同主域下模拟CAS实现单点登录

假设有两个网站分别为a.mysite.com(简称a服务)和b.mysite.com(简称b服务),和一个SSO单点登录服务sso.mysite.com(简称sso服务)。

实现步骤:

  • 用户访问a.mysite.com,在a服务上使用拦截器检查Cookie中是否有Token;
  • 如果发现没有授权,此时跳转到sso.mysite.com网站进入登录认证;
  • sso服务处理流程
  1. 如果用户名和密码正确,登录成功后生成Token,
  2. 以Token为key,查询到的User对象为value,存入到Redis缓存中,缓存时间 30分钟。
  3. 将Token写入到.mysite.com域下客户端Cookie中
  4. 跳转到a.mysite.com
  • 在a服务上使用拦截器检查有Token,将此Token在Redis取出登录用户,只有Token和User同时存在,则判断授权成功。并将User存入request作用域,供本站使用。
  • 用户访问b.mysite.com,在b服务上使用拦截器检查Cookie中是否有Token;
  • 如果发现没有授权,此时跳转到sso.mysite.com网站进入登录认证;
  • 由于sso.mysite.com域上Cookie中已经存在Token,则认为已经登录,跳转到b.mysite.com

退出登录步骤:

  • 由sso.mysite.com负责退出,用户点击退出后,sso清除本域Cookie和Redis缓存
  • a服务和b服务在判断授权时,发现没Redis缓存,则清除本域Cookie,向sso服务再次请求授权,sso服务也没有Cookie则弹出登录页面。

遇到的一些问题:

  1. 如果Token被劫持或伪造怎么办?

Token中隐含了IP地址,即便劫持也只能要原来的机上使用,换到另外的机器则不行。

     2.如果不同域(主域名不同)要实现单点登录怎么办?

解决办法:

第1种:登录成功后通过Http协议头部传递Token,跳转后,子应用从头部取出token再写cookie,

第2种:使用Oauth2协议实现

第3种:使用CAS

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值