原理探究:单点登录(SSO)原理和实现

HTTP协议的无状态性

HTTP无状态协议,浏览器的每一次请求,服务器都会独立处理,不与之前或之后的请求产生关联,所以,任何用户都可以通过浏览器访问服务器资源。

session和cookie机制

其实前文《一文彻底搞懂cookie和session》已经非常深入的讨论过cookie和session了。

session是服务器级别的,cookie是浏览器级别的。

session:浏览器第一次请求服务器,服务器创建一个会话,并将会话的id作为响应的一部分发送给浏览器,浏览器存储会话id,之后浏览器的每一次访问服务器都会带上会话id,服务器根据会话id就知道是不是同一个用户了。
在这里插入图片描述
cookie:session机制每一次浏览器访问服务器,服务器都要判断一次会话id,显然不太合适。于是浏览器来维护会话id就是cookie机制。浏览器每次访问服务器都会自动附带cookie信息。
在这里插入图片描述
cookie和session机制就可以确保一个用户登录到一个系统后,之后的操作在一定时间内就不需要再次登录系统。

以上的 sessioncookie都只适用于单系统,但是系统数量变多成为多系统时,我们总不能访问一个分支系统就登录一次吧,于是将这些子系统的域名统一到一个顶级域名中,然后将cookie域设置成顶级域名,于是各个子系统之间就可以共享cookie

何为单点登录?

是什么

单点登录全称 single sign on,简称 SSO,指在多系统应用群中登录一个系统,便可在其他所有系统中得到授权而无需再次登录,包括单点登录和单点注销两部分。比如你用阿里系产品,你一旦打开浏览器登陆过淘宝网,接下来你会发现你再打开天猫,其竟然自动登录了!

从哪来

由于共享 cookie有很多局限性。例如:域名难以统一子系统技术难以统一。所以,需要一种全新的登录方式实现多系统应用群的登录 单点登录

单点登录实现原理

登录

sso需要一个 独立的认证中心只有认证中心能接受用户的用户名密码等安全信息,其他系统不提供登录入口,只接受认证中心的间接授权。间接授权通过令牌实现,sso认证中心验证用户的用户名密码没问题,创建授权令牌,在接下来的跳转过程中,授权令牌作为参数发送给各个子系统,子系统拿到令牌,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。具体过程如图所示:
在这里插入图片描述
操作步骤如下:

  1. 用户访问系统1的受保护资源,系统1发现用户未登录,跳转sso认证中心,并将自己的地址作为参数。
  2. sso认证中心发现用户未登录,将用户引导至登录页面。
  3. 用户输入用户名和密码提交登录申请。
  4. sso认证中心校验用户信息,创建用户和sso认证中心之间的会话,称为全局会话,同时创建授权令牌。
  5. sso认证中心带着令牌跳转回最初的请求地址(系统1)。
  6. 系统1拿到令牌,去sso认证中心校验令牌是否有效。
  7. sso认证中心拿到令牌,返回有效,注册系统1。
  8. 系统1使用该令牌创建于用户的会话,称为局部会话,返回受保护资源。
  9. 用户访问系统2的受保护资源
  10. 系统2发现用户未登录,跳转至sso认证中心,并将自己的地址作为参数。
  11. sso认证中心发现用户已登录,跳转回系统2的地址,并附上令牌。
  12. 系统2拿到令牌,去sso认证中心校验令牌是否有效。
  13. sso认证中心拿到令牌,返回有效,注册系统2。
  14. 系统2使用该令牌创建与用户的局部会话,返回受保护资源

基于Spring框架实现单点登录

在强大的Spring全家桶面前,单点登录的代码实现变得非常容易,这在前文《基于Spring Security Oauth2的SSO单点登录+JWT权限控制实践》已经实现过,Github源码都已经给出,可以直接参考。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值