sso单点登录系统

一、单点登录SSO分析

1、单系统登录机制

浏览器第一个请求服务器,服务器会创建一个会话,并将会话的ID作为响应的一部分发送给浏览器,浏览器存储会话ID,并在后续的请求中带上会话ID,服务器取得请求中的会话ID就知道是不是同一个用户了。 

浏览器存储会话ID的两种方式
1.将会话ID作为每一个请求的参数,服务器接收请求并解析会话ID,就可以判断是否来自同一个会话,此方式不可靠
cookie 
2.浏览器维护会话ID,每次发送http请求是浏览器会自动发送会话ID,cookie机制正好用来做这件事。cookie是浏览器用来存储少量数据的一种机制,数据以key/value形式存储,浏览器发送http请求是自动附带cookie信息。 
tomcat会话机制也实现了cookie,访问tomcat服务器时,浏览器中可以看到一个名为JSESSIONID的cookie,这就是tomcat会话机制中维护的会话ID。


浏览器第一次请求时需要用户输入用户名,密码等身份信息。服务器接收到身份信息之后进行校验,校验成功之后,将会话状态 更新为已登录或已注册状态,并返回受保护的资源。 
每次请求受保护资源时都会检查会话对象中的登录状态,只有通过验证的会话才能访问,登录机制因此而实现。

2、复杂系统机制

web系统早已从久远的单系统发展成为如今由多系统组成的应用群,面对如此众多的系统,用户难道要一个一个登录,一个一个注销? 

  • web系统由单系统发展成多系统组成的应用群,复杂性应该由系统内部承担,而不是用户。
  • 无论web系统内部多么复杂,对用户而言,都是一个统一的整体,也就是说,用户访问web系统的整个应用群与访问单个系统一样,登录/注销只要一次就够了。
3、单系统登录的限制

虽然单系统的登录解决方案很完美,但对于多系统应用群已经不再适用了,为什么呢? 
单系统登录解决方案的核心是cookie,cookie携带会话id在浏览器与服务器之间维护会话状态。但cookie是有限制的,这个限制就是cookie的域(通常对应网站的域名),浏览器发送http请求时会自动携带与该域匹配的cookie,而不是所有cookie。 
既然这样,为什么不将web应用群中所有子系统的域名统一在一个顶级域名下,例如“*.baidu.com”,然后将它们的cookie域设置为“baidu.com”,这种做法理论上是可以的,甚至早期很多多系统登录就采用这种同域名共享cookie的方式。 
然而,可行并不代表好,共享cookie的方式存在众多局限。

共享cookie的限制:

1.应用群域名得统一;

2.应用群各系统使用的技术(至少是web服务器)要相同,不然cookie的key值(tomcat为JSESSIONID)不同,无法维持会话,共享cookie的方式是无法实现跨语言技术平台登录的,比如java、php、.net系统之间;

3.cookie本身不安全。 


因此,我们需要一种全新的登录方式来实现多系统应用群的登录,这就是单点登录系统

4、单点登录系统

什么是单点登录?单点登录全称Single Sign On(以下简称SSO),是指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录与单点注销两部分

登录
相比单系统登录,sso需要一个独立的认证中心,只有认证中心可以接受用户的用户名,密码等身份信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码无误后,创建授权令牌,在接下来的跳转过程中 ,授权令牌作为参数发送给各个子系统。子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式于但系统登录方式相同。

大致流程
用户访问子系统1的受保护资源,系统1发现用户未授权,跳转至sso认证中心,并将自己的地址作为参数。
sso认证中心发现用户为通过授权,将用户引导至登录页面,进行授权。
sso校验用户信息,创建用户于sso认证中心之间的会话,称为全局会话,同时创建令牌,sso认证中心携带令牌跳转至最初的请求地址(1中的参数,系统1)
系统1拿到令牌后,去sso认证中心校验令牌是否有效
sso认证中心校验令牌。返回有效,注册系统1
系统1使用该令牌创建用户的会话,称为局部会话,返回受保护的资源。
用户认证成功之后,会于sso认证中心以及各个子系统创建会话,用户与sso认证中心创建的会话称为全局会话,用户与各个子系统之间创建的会话称为局部会话,局部会话建立之后,用户访问子系统受保护的资源将不再通过sso认证中心。

全局会话和局部会话有如下约束关系

局部会话存在,全局会话一定存在
全局会话存在,局部会话不一定存在
全局会话销毁,局部会话必须销毁
注销
单点登录自然也要单点注销,在一个子系统中注销,所有子系统的会话都将被销毁

大致流程
用户向系统1发起注销请求
系统1根据用户与系统1建立的会话ID拿到令牌,向sso认证中心发起注销请求
sso认证中心校验令牌有效,销毁全局会话,同时取出所有用此令牌注册的子系统地址
sso认证中心向所有注册的子系统发起注销请求
各个注册的子系统接收sso人中中心的注销请求,销毁局部会话
sso认证中心引导用户至登录页面

https://blog.csdn.net/weixin_37264997/article/details/80489376

转载于:https://my.oschina.net/qcxdld/blog/2995831

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值