08单点登陆+Oauth2

article/2025/9/3 17:45:12

详情:如看不懂跳转此地
1.1单点登录系统

每个站点都实现了专用登录模块。各站点的登录状态相互不认可,各站点需要逐一手工登录

这样的系统,我们又称之为多点登陆系统。应用起来相对繁琐(每次访问资源服务都需要重新登录认证和授权),与此同时,系统代码的重复比较高,由此单点系统诞生。

1.2单点登录系统概述(英文:Single Sign On(缩写:SSO)。

多个站点同时访问(共用)一台认证授权服务器,用户在任意一个站点都可以登录,登录后可以免登录访问其他所有站点。而且各站点间可以通过该登录状态直接交互。例如:

 打个比方:像王者荣耀选择英雄,用户可以任意选一个英雄进游戏,不管选哪个英雄都可以进入到游戏里,并且保存当前的战绩

1.3单点登录系统解决方案设计

①解决方案1:用户登录成功以后,将用户登录状态存储到redis数据库

此套方案,效果一般。
原因:当用户登录成功后,基于UUID生成一个token跟随着用户信息一同存入数据库,若用户二次访问资源时,基于token再从数据库查询用户状态(用户的数据)。相当于相互传递用户信息,效果不显著
----------------------------------------------------------------------------------------------------------------------------
②解决方案2:用户登录成功以后,将用户信息存储到token(令牌),然后写到客户端进行存储

此套方案更加注重于用户信息的存储
说明:用户登录成功后,基于JWT生产一个token,用户信息可以存储到token(令牌)当中。
后续用户访问资源时,直接对token内容解析,检查(检测token中的用户基本信息)登录状态以及权限信息,无需再访问数据库
-------------------------------------------------------------------------------------------------------------------------------
①方案与②方案对比
①方案时基于UUID生成一个token,而②方案是基于JWT技术生产一个token
①方案token与用户信息绑定,用户二次查询的时候,token要去数据库拿数据(多次重复这样的步骤)
②方案用户信息直接放于token中,用户二次访问时,直接对token解析用户数据信息与权限,无需再过数据库
个人看法:②方案更为直接,但是我在考虑一个问题,①方案是token去调用数据库,中间是存在缓冲区的吧,以至于数据不会造成临时丢失之类的问题。不过②方案的更加直观,直接对token中的用户查询信息,考虑的因素多,②方案也无非是最佳的。
========================================================================

1.4单点系统初步设计

1.4.1服务设计

基于单点登录系统中的业务描述,进行初步服务架构设计

其中,服务基于业务进行划分,系统(system)服务只提供基础数据(例如用户信息,日志信息等),认证服务(auth)负责完成用户身份的校验,密码的比对,资源服务(resource)代表一些业务服务(例如我的订单,我的收藏等等)

SSO父工程创建及初始化(创建工程)

 2.Security 认证流程分析(了解)

目前的登录操作,也就是用户的认证操作,其实现主要基于Spring Security框架,其认证简易

 我们来说说Security吧

2.1Spring-Security源码解读

双击Shift显示弹窗搜索
UsernamePasswordAuthenticationFilter   过滤器
该过滤器是yoyong用来处理用户认证逻辑的

 

 我们可以看到下方图片,它其中的默认登录请求url是“login” ,并且只允许POST方式的请求

 obtainUsername()方法点进去发现它默认是根据参数名为"username"和"password"来获取用户名和密码的

 解析原文只有一部分先来个链接,大家可以去了解一下
Spring-Security源码解读

 3.1构建令牌生产及配置对象:

本次借助方案②的JWT(Json Web Token ->是一种json格式)方式将用户相关信息进行组织和加密,并作为响应令牌(Token),从服务端响应到客户端,客户端接受到这个JWT令牌之后,将其保存在客户端,然后携带令牌访问资源服务器,资源服务器获取并解析令牌的合法性,基于解析结果判定是否允许用户访问资源

打个比方:
前提说到,JWT是将用户的信息存储到了Token中,现是将token中的用户信息保存到了客户端。(就如同生活中驾驶证(令牌)一样,当你即将要通过收费站时,交警对你进行检测是否合格进入,如果发现你酒驾或者无照驾驶,则不允许你通过(合法性不合格),如果你是无异常,则允许进入(用户即可访问资源)

3.2定义Oauth2认证授权配置:

①将准备的所有文件(所需要的项目与相关的类)准备好后,开始拼装最后的主体部分,这个主体部分就是授权服务器的核心配置(将所有的配置拼接成最后的主体)

(所有的代码去这)---> 拼装主体需要的代码


http://chatgpt.dhexx.cn/article/WcWr5N5x.shtml

相关文章

微服务版单点登陆系统(SSO)

单体架构中的用户的状态的存储是如何实现的? 单点登陆系统概述 单点登录,英文是 Single Sign On(缩写为 SSO)。即多个站点共用一台认证授权服务器,用户在其中任何一个站点登录后,可以免登录访问其他所有站点。而且&a…

SpringBoot跨系统单点登陆的实现

什么是单点登陆 单点登录(英语:Single sign-on,缩写为 SSO),又译为单一签入,一种对于许多相互关连,但是又是各自独立的软件系统,提供访问控制的属性。当拥有这项属性时,…

单点登陆的实现

王昱 yuwang881gmail.com 博客地址 http://yuwang881.blog.sohu.com 摘要 :单点登录( SSO )的技术被越来越广泛地运用到各个领域的软件系统当中。本文从业务的角度分析了单点登录的需求和应用领域;从技术本身的角度分析了单点…

CAS 单点登陆

一、Tomcat配置SSL 1. 生成 server key 以命令方式换到目录%TOMCAT_HOME%,在command命令行输入如下命令: keytool -genkey -alias tomcat_key -keyalg RSA -storepass changeit -keystore server.keystore -validity 3600 用户名输入域名,如localhos…

单点登陆的测试

今天做了个单点登陆 。 但是怎么测试呢? 下面请看详解: 源码中是这样的: /*** 单点登录改造* * param request* param response* return* throws IOException* throws HttpException* throws IOException*/RequestMapping(value "/rcbS…

LINUX单点登陆

1.在grub引导界面(如下图)按e进入编辑模式 2.按↓键,找到以linux16开头的行,在最后加上 rd.break(如下图,注意前面有一个空格) 3.按Ctrlx进入救援模式 4.重新挂载/sysroot为可读写模式,并切换根目录为/sysroot # mount -o remou…

java实现单点登陆(SSO)

java实现单点登陆(SSO) 网络域名必须完全一致,才代表同一站点。 域名映射 :访问后面的 会跳转到前面 单点登陆概念: 多系统,单一位置登录,实现多系统同时登陆。常出现在互联网和企业级平台中。…

OAuth2:单点登陆客户端

基于EnableOAuth2Sso实现 前面我们将验证服务器已经搭建完成了,现在我们就来实现一下单点登陆吧,SpringCloud为我们提供了客户端的直接实现,我们只需要添加一个注解和少量配置即可将我们的服务作为一个单点登陆应用,使用的是第四种…

单点登陆概述

概述 什么是单点登陆 单点登陆(single sign on),简称SSO,是比较流行的企业业务整合的解决方案之一。SSO的定义是在多个应用系统中,用户只需要登陆一次就可以访问所以相互信任的应用系统。 单点登陆的实现方案 一般…

怎么做登陆(单点登陆)功能?

登陆是系统最基础的功能之一。这么长时间了,一直在写业务,这个基础功能反而没怎么好好研究,都忘差不多了。今天没事儿就来撸一下。 以目前在接触的一个系统为例,来分析一下登陆该怎么做。 简单上个图(有水印。因为穷所…

SSO单点登陆

1 SSO简介 1.1 什么是SSO 单点登录(SingleSignOn,SSO),在多个应用系统中,用户只需一次登录就可以访问所有相互信任的应用系统。单点登录常用的协议包括 CAS、OAuth、OpenID Connect、SAML。 例如:百度旗下有很多的产品&#xff…

sso单点登陆实现

多系统实现单点登录方案:SSO 单点登录 一、什么是单点登录SSO(Single Sign-On) SSO是一种统一认证和授权机制,指访问同一服务器不同应用中的受保护资源的同一用户,只需要登录一次,即通过一个应用中的安全验…

单点登陆和无状态登陆

很多人都听说过单点登陆。今天我们来说说什么是单点登陆和无状态登陆。 传统的项目都是使用session来验证登陆,但是在分布式项目中使用session是不行的。因为每个服务都是一个独立的项目,那么我们将服务拆分,肯定会有一个登陆的模块。如果将用…

windows文件句柄修改

找到如下注册表分支: HKEY_LOCAL_MACHINE – SOFTWARE – – Microsoft – – – Windows NT – – – – CurrentVersion – – – – – Windows 在右侧窗格中可以看到名为“GDIProcessHandleQuota”与“USERProcessHandleQuota”的注册表项; GDIProcessHandleQuo…

Linux 查看文件句柄信息

查看系统的最大文件句柄数和文件句柄的使用者PID ulimit -n查看当前系统的最大句柄数显示如下 ulimit命令详解 ulimit -HSn x设置当前系统的文件句柄数为x 以上命令中,H指定了硬性大小,S指定了软性大小,n表示设定单个进程最大的打开文件句柄…

Windows查看文件句柄

2019独角兽企业重金招聘Python工程师标准>>> 图形界面方式 打开任务管理器 2. 性能tab,点击链接打开资源监视器; 3. 现在cpu tab,关联的句柄后面的输入框可以输入你要搜索的文件路径,可模糊匹配; 命令方式 Windows系统本身并不内置命令查看句…

linux文件句柄数

1、问题阐述: too many open files:顾名思义即打开过多文件数。 不过这里的files不单是文件的意思,也包括打开的通讯链接(比如socket),正在监听的端口等等,所以有时候也可以叫做句柄(handle),这个错误通常…

windows 查看打开的文件句柄

经常当我们删除文件时,有时会提示【操作无法完成,因为文件已在另一个程序中打开,请关闭该文件并重试】, 这个时候可以资源监控器进行查看运行的进程打开的句柄列表。 具体结果如下显示:

Linux下文件句柄

Too many open files 如果Java打开文件的时候,没有关闭IO流,那么打开到一定数量,在Linux下就会抛出Too many open files的异常。 public static class HoldIOTask implements Runnable {Overridepublic void run() {int count0;try {while(t…

【Linux】文件句柄说明

Linux 文件句柄说明 Linux中所有的事物或资源都是以文件的形式存在,比如消息、共享内存、连接等,句柄可以理解为指向这些文件的指针。 对于这些句柄,Linux是有数量限制的,单个进程默认可以打开的句柄数上限,可以用以…