单点登录实现的几种方式及原理【单点登录】

一、什么是单点登录

单点登录的英文名叫做:Single Sign On(简称SSO),指在同一帐号平台下的多个应用系统中,用户只需登录一次,即可访问所有相互信任的系统。简而言之,多个系统,统一登陆。

为什么需要做单点登录系统呢?在一些互联网公司中,公司旗下可能会有多个子系统,每个登陆实现统一管理,多个账户信息统一管理 SSO单点登陆认证授权系统。比如阿里系的淘宝和天猫,显而易见这是两个系统,但是在使用过程中,只要你登录了淘宝,同时也意味着登录了天猫,如果每个子系统都需要登录认证,用户早就疯了,所以我们要解决的问题就是,用户只需要登录一次就可以访问所有相互信任的应用系统。

二、单点登录原理

sso需要一个独立的认证中心,所有子系统都通过认证中心的登录入口进行登录,登录时带上自己的地址,子系统只接受认证中心的授权,授权通过令牌(token)实现,sso认证中心验证用户的用户名密码正确,创建全局会话和token,token作为参数发送给各个子系统,子系统拿到token,即得到了授权,可以借此创建局部会话,局部会话登录方式与单系统的登录方式相同。
在这里插入图片描述

三、单点登录实现方式

单点登录的实现方案,一般就包含:Cookies,Session同步,分布式Session,目前的网站采用比较多的方式是token令牌和分布式Session的方式。

1.基于Cookie+Redis的单点登录

最简单的单点登录实现方式,用cookie作为媒介存放用户凭证。 用户登录系统之后,会返回一个加密的cookie,当用户访问子应用的时候会带上这个cookie,授权以解密cookie并进行校验,校验通过后即可登录当前用户。

redis:在key:生成唯一随机值(ip、用户id等等),在value:用户数据

cookie:把redis里面生成key值放到cookie里面
在这里插入图片描述
下面对上图简要描述

  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使用该令牌创建与用户的局部会话,返回受保护资源

通过加密Cookie可以保证安全性,当然这是在源代码不泄露的前提下。如果Cookie的加密算法泄露,攻击者可以通过伪造Cookie伪造成特定用户身份。 对于问题二更是硬伤,所以才有了以下的分布式session方案。

2.分布式session方式实现单点登录

流程运行:

(1) 用户第一次登录时,将会话信息(用户Id和用户信息),比如以用户Id为Key,写入分布式Session;

(2) 用户再次登录时,获取分布式Session,是否有会话信息,如果没有则调到登录页;

(3) 一般采用Cache中间件实现,建议使用Redis,因此它有持久化功能,方便分布式Session宕机后,可以从持久化存储中加载会话信息;

(4) 存入会话时,可以设置会话保持的时间,比如15分钟,超过后自动超时;

结合Cache中间件,实现的分布式Session,可以很好的模拟Session会话。

3.token验证

  1. 在项目某个模块进行登录,登录之后,按照jwt规则生成字待串,把登录之后用户包含到生成字符串里面,把字符串返回

(1)可以把宁符串通过cookie返回
(2)把字符串通过地址栏返回

  1. 前端收到token之后将token存储在自己的请求头之中或者url后面,这样每次请求都可以带着token请求。

  2. 再去访问项目其他模块,获取地址栏或者请求头里面的token,根据宇符串获职用户信息。

  3. 同时为了设置失效时间,可以将token放在redis中,设置失效时间,判断过期。

4.session广播

方法太老使用麻烦,了解即可。

5.CAS 中央认证服务

https://blog.csdn.net/wang121213145/article/details/124822899?spm=1001.2014.3001.5501

  • 18
    点赞
  • 174
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 9
    评论
单点登录实现原理是通过在一个系统中进行登录认证后,将用户的登录状态保存在服务器端,然后在其他系统中访问时,通过检查用户的登录状态来判断用户是否已经登录,从而实现用户在多个系统中的无缝访问。具体实现方式有以下几种: 1. 基于Cookie+Redis单点登录:用户在登录系统时,服务器端生成一个唯一标识符,并将该标识符存储在Redis中,然后将该标识符写入Cookie中返回给客户端。当用户访问其他系统时,系统会检查Cookie中是否存在该标识符,如果存在,则说明用户已经登录,否则需要重新登录。 2. 分布式session方式实现单点登录:将用户的登录状态存储在分布式session中,当用户访问其他系统时,系统会检查session中是否存在该用户的登录状态,如果存在,则说明用户已经登录,否则需要重新登录。 3. token验证:用户在登录系统时,服务器端生成一个token,并将该token返回给客户端,当用户访问其他系统时,系统会检查token是否有效,如果有效,则说明用户已经登录,否则需要重新登录。 4. session广播:将用户的登录状态广播到其他系统中,当用户访问其他系统时,系统会检查是否收到该用户的登录状态广播,如果收到,则说明用户已经登录,否则需要重新登录。 5. CAS中央认证服务:CAS是一种基于票据的单点登录协议,用户在登录系统时,服务器端生成一个票据,并将该票据返回给客户端,当用户访问其他系统时,系统会检查票据是否有效,如果有效,则说明用户已经登录,否则需要重新登录。
评论 9
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

杵意

谢谢金主打赏呀!!

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值