在早期的互联网业务中,一般是使用单一服务器模式。但随着互联网的飞速发展,互联网用户的体量不断增大,单一服务器模式存在单点性能压力,无法扩展,以及单点失效等问题,已经不适合如今的互联网业务了,因此更多的,我们现在一般采用分布式微服务的架构来搭建项目。分布式的项目架构大致如下图所示(即一个项目下多个模块,这些模块又部署在不同的机器上):

采用分布式的架构后,为了避免出现用户在一个模块登录后,访问别的模块时还需要重新登录的问题,我们需要使用单点登录(single sign on SSO)的模式来实现用户登录功能,这样用户只需要在一个模块登录后,访问其他模块就无需重复登录了。一般来说,实现单点登录主要有以下三种方式。

一、session 广播机制实现

在用户登录了一个模块后,这个模块的服务器会将用户的登录信息保存在本机的session中,然后通过session的广播机制,将这台服务器session中的内容复制到其他模块所在服务器的session中,这样其他的模块也就得到了用户的登录信息,用户在访问其他模块时就不需要重复登录了。
但这种模式会多次复制session中的内容,造成用户数据的冗余存储,因此并不推荐使用这种方式实现单点登录。

二、使用 cookie + redis 实现

用户在项目的任意一个模块登录后,该模块会将用户的登录信息放到 redis 和 cookie 中。
① 系统会先将用户的登录信息存入 redis中,其在 redis 的 key 值是生成的唯一值 (可以包含 IP、用户 id、UUID等值),value 值存放用户的登录信息。

② 然后系统会将这名用户在 redis 中的 key 值存入该用户的 cookie 中,用户每次访问任意模块时都会带着这个 cookie。

③ 用户在访问其他模块发送请求时,都会带着客户端的 cookie 进行请求,而客户端的 cookie 已经存入了该用户在 redis 中的 key 值,这样其他模块在处理用户的请求时,可以先获取用户 cookie中的 key 值,然后拿着这个 key 值到 redis 中进行查询,如果在 redis 中能查询到该用户相应的登录信息,就说明该用户已登录,就不需要用户进行重复登录了。

三、使用 token 实现

token 是按照一定规则生成的字符串,字符串中可以包含用户信息。开发人员可以自行定制这个生成规则,也可以使用提供好的生成规则(如使用 JWT 自动生成包含用户信息的字符串)。

① 用户在项目的某个模块进行登录后,系统会按照一定的规则生成字符串,把用户登录之后的信息包含到这个生成的字符串中,然后系统可以将这个字符串返回,主要有两种返回方式:
(1)可以把字符串通过 cookie 返回
(2)可以把字符串通过地址栏返回

② 这样用户在访问其他的模块时,每次访问的地址栏都会带着生成的字符串(或者 cookie 中带着生成的字符串),被访问模块就可以获取地址栏中的生成字符串(或者获取 cookie 中的生成字符串),然后根据字符串获取用户信息,如果可以获取到用户的登录信息,说明该用户已登录,用户就不需要重复登录了。

实现单点登录(SSO)的三种方式相关推荐

  1. Springboot实现登录拦截的三种方式

    文章目录 1. 登录认证 1.1 介绍 1.2 方式 1.3 扩展 2. 实现 2.1 项目结构以及前置准备 2.2 过滤器实现登录拦截 2.3 拦截器实现登录拦截 2.4 AOP+自定义注解实现 2 ...

  2. Spring Boot 实现单点登录的第三种方案!

    前面松哥发过两篇文章,也是两种方案,讲到单点登录问题: OAuth2+JWT 方案 @EnableOAuth2Sso 注解方案 今天再来和大家介绍第三种方案,使用 Spring Security 开发 ...

  3. 微信小程序之Github API用户登录认证的三种方式

    调用Github API时需要进行身份认证.Github建议并提供基于OAuth2的第三方认证. 一.使用github提供的第三方认证(最常用方法) 使用github提供的第三方认证,需要先注册0au ...

  4. MySQL数据库修改用户登录密码的三种方式

    文章目录 一.更新 mysql.user 表 二.用 set password 命令 三.使用 mysqladmin 命令 提醒:MYSQL5.7 版本后不再支持password()函数和passwo ...

  5. 使用Spring Security OAuth2实现单点登录(SSO)系统

    一.单点登录SSO介绍   目前每家企业或者平台都存在不止一套系统,由于历史原因每套系统采购于不同厂商,所以系统间都是相互独立的,都有自己的用户鉴权认证体系,当用户进行登录系统时,不得不记住每套系统的 ...

  6. 够狠 | 单点登录三种方式,够狠!够劲爆!

    Hi! 我是小小,今天是本周的最后一篇,本篇将会着重讲解单点登录的三种方式. 前言 单点登录分为三种机制,这三种机制分别为http无状态协议,会话机制,登录机制等这三种机制. http无状态协议 we ...

  7. .net session 有效时间_Python中requests模拟登录的三种方式(携带cookie/session进行请求网站)...

    这篇文章主要介绍了python中requests模拟登录的三种方式(携带cookie/session进行请求网站),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋 ...

  8. 微信或企业微信实现扫码登录的三种方式

    通过微信或企业微信扫码登录PC管理后台,替代传统的账号.密码登录. 为了完成这个功能,疯狂百度各种扫码登录的技术文章,能实现微信或企业微信扫码登录的方式可以说有三种: 1.注册一个微信资源开放平台账号 ...

  9. 使用qq 、微信和新浪微博三种方式登录demo

    最近开发项目,遇到使用qq .微信和新浪微博三种方式登录的需求,其中也遇到了一些坑,分享出来,给有需要的朋友一些启发!废话不多说,直接开始. 一.微博登录  这个比较坑,官方的api文档只言片语,最好 ...

  10. Spring MVC 实战:三种方式获取登录用户信息

    前言 Web 项目中,维持用户登录状态的常用方式有三种,分别是 Cookie.Session.Token,不管哪种方案,都需要获取到用户信息供业务层使用. 由于获取用户信息与具体业务无关,因此在普通的 ...

最新文章

  1. DTCMS插件的制作实例电子资源管理(四)URL重写
  2. 帧中继和路由协议详解-在帧中继多点子接口上运行EIGRP
  3. PostgreSQL创建数据库时报错:ERROR: source database template1 is being accessed by other users
  4. Linux链接库二(动态库,静态库,库命名规则,建立个没有版本号的软连接文件)...
  5. 【Liunx服务器】阿里云服务器下部署多个tomcat服务
  6. 理解lambda在linq中的应用
  7. 老子《道德经》第三十七章
  8. JavaScript的输出(2)
  9. java 构建 数字 list_数字全排列返回list的list:java实现
  10. openlayers 点线面
  11. 激活Windows10,激活软件被报出,软件存在威胁或者恶意程序?
  12. 2×3卡方检验prism_何时应该使用非参数检验?
  13. face_recognition库的安装以及学习
  14. 【渝粤题库】国家开放大学2021春1089现代教育思想题目
  15. 医院科室管理系统(IDEA开发)
  16. Wallpaper Engine使用视频壁纸黑屏解决方法(window10)
  17. Android studio 模拟器启动黑屏解决办法
  18. ubuntu teamviewer
  19. 【CANopen】CANopen总线讲解
  20. 后端@RequestBody postman 如何设置

热门文章

  1. 【数理逻辑四】谓词逻辑及形式系统 【中】
  2. 英语在线听力翻译器_英语听力翻译app下载-英语听力翻译软件下载v1.1.3 安卓版-2265安卓网...
  3. php 调用speex解码库,怎么增加speex解码库
  4. 电脑怎么把大量音频合并
  5. JAVA 9中module初探
  6. Java将html转换PDF文件
  7. android 连接蓝牙耳机 播放音乐,Android连接蓝牙耳机播放音乐
  8. 使用小米蓝牙耳机airdots青春版的感受及单耳双耳配对教程(转载)
  9. python数据分析-学生成绩分析
  10. Detours库Windows API Hook