首页 > 其他分享 >单点登录的设计与实现思路

单点登录的设计与实现思路

时间:2023-09-24 22:44:53浏览次数:35  
标签:单点 登录 用户 认证 cookie 应用 浏览器 思路

1.定义

单点登录 (Single sign-on ,缩写为 SSO),一种对于许多相互关连,但是又是各自独立的软件系统,提供“存取控制” 的属性。 当拥有这项属性时,当用户“登录”时,就可以获取所有系统的存取权限,不用对每个单一系统都逐一登录。

2.概述

随着业务的发展,产品的功能越来越多,越来越重,这时候就需要将各业务模块拆分成一个独立的应用,每个应用再专注的发展自己的业务特点。然而这些应用又彼此互联,它们共用一套用户基础数据,这个基础数据就是公司的用户数据中心。例如,淘宝首页嵌套有“天猫”、“飞猪”、“聚划算”等,一旦登录了淘宝帐号,便可直接以登录状态跳转到各个链接的应用中。

单点登录就是这种彼此互联又相互独立的软件登录场景中的一种“设计思想”,用来实现“一次登录,处处使用”。注意,单点登录只是一种思想,而不是一种技术,实现它的最常用技术是OAuth,接下来会讲到这个技术。

3.基本原理

参与角色

浏览器端:Cookie中存放应用1、应用2、认证中心的sessionid,后续同域名的请求header头中自动携带该cookie

应用1:对应公司内的某个应用,在其数据库中会维护一份有关于该应用的的用户信息,有自己的登录服务1、应用服务1

应用2:对应公司内的某个应用,在其数据库中会维护一份有关于该应用的的用户信息,有自己的登录服务2、应用服务2

认证中心:有个用户数据中台,放在公司官网中注册的用户信息(用户名、密码)

前提条件

在公司官网中(数据保存到认证中心)验证通过的用户名密码必须能在公司各应用(数据保存到各应用数据库)登录服务中验证通过

 

  •  第一步,新打开一个浏览器,在浏览器页签中打开资源1的URL,由于此时是第一次请求,当前域名cookie中无session信息,资源1的后端服务鉴权中心发现没有登录信息(一般在资源服务器之前有网关层,网关层中做鉴权认证,通常使用cookie中的sessionId去分布式缓存中换取用户信息),就直接302重定向到登录服务。
  • 第二步,用户输入登录信息,请求到应用1的登录服务1,登录服务1去认证中心验证用户名密码,验证通过后,将获取到的token返回给登录服务1。登录服务1和认证中心都会在自己的分布式缓存中维护登录状态和用户信息(用户信息是一个键值对,键会在浏览器端的cookie中保存一份,值是序列化的用户信息),同时会向前端Cookie中设置两个sessionid,一个是应用1的sessionid1(cookie的作用域是应用1的域名),一个是认证中心的sessionid-auth(cookie的作用域是认证中心的域名)。
  • 第四步,浏览器端判断登录成功后,header头cookie中自动携带应用1的sessionid信息,重定向访问资源1,后端根据sessionid1从分布式缓存中获取到用户信息,当登录状态设置到当前请求上下文中。业务数据处理完成后返回给浏览器端。
  • 第五步,浏览器继续请求下一个应用1的资源数据,header头cookie中依然自动携带应用1的sessionid信息,后端根据sessionid1从分布式缓存中获取到用户信息,当登录状态设置到当前请求上下文中。业务数据处理完成后返回给浏览器端。后续请求均如此
  • 第六步,这时用户需要在同一个浏览器中访问应用2中的资源2,第一次访问应用2一般会在请求中包含一个特殊的字符(例如:sso),用于标识这不是通过用户名密码登录在后台维护的登录态,而是单点登录的请求。前端js识别到这个URL后,会首先向认证中心发送一个请求,自动携带认证中心的sessionid-auth,询问认证中心,这个sessionid对应的用户是不是在别的应用登录过,如果有,你给我返回一个authcode。认证中心查询自己的分布式缓存,发现有这个sessionid对应的用户信息,于是产生了一个authcode返回浏览器端
  • 第七步,浏览器拿到认证中心返回的authcode后,在请求应用2的登录服务2,告诉他,你看我从认证中心获取到了一个authcode,你给我换成具体的用户信息吧。登录服务2根据这个auth code去请求认证中心,认证中心返回用户名、token等用户信息。登录服务2在自己的分布式缓存中同样维护一份登录状态和用户信息,同时向前端Cookie中设置应用2的sessionid2
  • 第八步,单点登录成功后,重定向至应用2的资源2,逻辑同第四步
  • 第九步,浏览器继续请求下一个应用2的资源数据,逻辑同第五步

 

标签:单点,登录,用户,认证,cookie,应用,浏览器,思路
From: https://www.cnblogs.com/wenha/p/17721302.html

相关文章

  • 针对爬虫导致服务资源飙升解决思路
    方案一:允许爬虫请求进行请求限制爬虫请求的频率:通过设置请求速率限制,可以有效控制爬虫请求的数量和频率,从而减轻对服务的压力。可以使用框架或库来实现请求速率限制,例如Python中的ratelimit库[1]。使用缓存机制:通过将爬虫请求的结果缓存起来,可以减少对服务的重复请求,降低CPU的负载......
  • 46_解决office365开启代理提示“需要登录”的问题
    这是一篇原发布于2020-01-0609:55:00得益小站的文章,备份在此处。概览v2rayN代理了office的一些域名所致,只要把这些域名加入直连即可。症状开启v2rayN,office365提示“需要登录”,且在不开启v2rayN的状态下重新登录即恢复正常。软件版本系统:win10Pro190918363.535v2rayN:3.......
  • 深入探讨Spring Security的单点注销
    前言在现代Web应用程序中,单点登录(SSO)是一种常见的身份验证机制。它允许用户使用一组凭据(例如用户名和密码)登录到多个应用程序中,而无需在每个应用程序中都进行身份验证。然而,当用户注销时,他们可能希望注销所有应用程序,而不仅仅是当前应用程序。这就是单点注销的作用。在本文中,我们......
  • ensp使用telnet远程登录
    创建一个拓扑(路由器尽量使用AR2220,及以上的。这里使用的是AR201) 现配置ip地址,使路由器之间可以通信关闭命令提示undoinfo-centerenable AR1为intg0/0/0ipadd1.1.1.1 24AR2为使用ping命令是查看路由器是否通了开启远程telnetserverenable创建5账号user-interfacevty......
  • 用户登录~生成图片验证码(identify(生成图片验证码)插件)
    1.效果图:2.以用户登录实现生成图片验证功能:使用identify(生成图片验证码)插件identify:这是一个vue的插件,使用canvas来生成图形验证码2.1下载identify插件,npm安装 npmiidentify2.2具体参数如下:2.2在components目录新建一个SIdentify.vue,把以下代码复制进去!<tem......
  • 数据库SQL性能优化思路
    数据库SQL性能优化思路批量插入:使用批量插入语句(如INSERTINTO...VALUES(...))代替逐条插入,可以大大减少查询的次数和开销。预编译语句:使用预编译语句来优化SQL查询的执行。预编译语句可以在执行前进行编译,然后多次执行,减少每次执行的解析和优化时间。索引优化:分析查询......
  • ubuntu开启root用户远程ssh登录
    ubuntu系统初始状态下无法通过ssh登录到root用户,只能先登录普通用户再切换到root用户,本文讲解的是开启root用户远程ssh登录su-root切换到root用户su-root打开ssh配置文件vim/etc/ssh/sshd_config找到 插入 PermitRootLoginyes 保存退出重启ssh服务system......
  • 中文图形验证码 动态图形验证码 图片验证码 验证码【加逻辑思路解析】
    效果: 逻辑:生成数字随机数,再改为中文表示,返给前端。人为输入阿拉伯数字。(后端缓存中存入用户信息和随机数。做校验。)主要测试code:Randomrm=newRandom();Stringstrcode=Integer.toString(rm.nextInt(900000)+100000);System.out.println("生成......
  • drf - jwt自定义表签发、jwt 多方式登录(auth的user表)
    jwt自定义表签发1、导入模块: fromrest_framework_jwt.settingsimportapi_settings2、写一个属性:jwt_payload_handler=api_settings.JWT_PAYLOAD_HANDLERjwt_encode_handler=api_settings.JWT_ENCODE_HANDLER3、登录逻辑:classUserViews(ViewSet):......
  • SpringSecurity用户登录限制
    本次给你介绍只允许用户在一个地方登录,也就是说每个用户只允许有一个Session。他有两种场景如果同一个用户在第二个地方登录,则将第一个登录下线如果同一个用户在第二个地方登录,则不允许二次的登录同一个用户在第二个地方登录,则将第一个登录退出具体步骤如下:重构com.security.learn.......