【springboot+vue项目(十四)】基于Oauth2的SSO单点登录(一)整体流程介绍

场景:现在有一个前后端分离的系统,前端框架使用vue-element-template,后端框架使用springboot+springSecurity+JWT+Redis(登录部分)现在需要接入到已经存在的第三方基于oauth2.0的非标准接口统一认证系统。

 温馨提示:如果是接入到基于oauth2.0的标准接口的认证服务系统,可以直接使用spring-boot-starter-oauth2-client)参考:超级简单的springboot整合springsecurity oauth2第三方登录_spring-boot-starter-oauth2-client 实现登出-CSDN博客

 

整体的流程大概为:

  1. 用户请求访问应用系统的前端。
  2. 重定向到应用系统的后端。
  3. 应用系统后端将认证请求发送到认证服务器,认证服务器判断是否认证,如果没有认证过,则重定向到认证登录页面进行统一认证。
  4. 认证成功后,重定向到应用系统后端指定URL,并返回code。
  5. 应用系统后端根据返回的code请求认证服务器获取access_token和refresh_token。
  6. 应用系统根据返回的access_token请求认证服务器获取用户信息。
  7. 应用系统的后端根据用户信息生成token返回前端,
  8. 应用系统前端接受token并持久化,调用userinfo请求后端 接口,获取用户信息
  9. 后端验证解析token,将用户信息返回前端。
  10. 登录到应用系统主页。

温馨提示:此过程为大概流程,后面将分前端和后端部分详细介绍如何 改造原项目。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/685427.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RabbitMQ如何保证可靠

0. RabbitMQ不可靠原因 消息从生产者到消费者的每一步都可能导致消息丢失: 发送消息时丢失: 生产者发送消息时连接MQ失败生产者发送消息到达MQ后未找到Exchange生产者发送消息到达MQ的Exchange后,未找到合适的Queue消息到达MQ后,…

使用TinyXML-2解析XML文件

一、XML介绍 当我们想要在不同的程序、系统或平台之间共享信息时,就需要一种统一的方式来组织和表示数据。XML(EXtensible Markup Language,即可扩展标记语言)是一种用于描述数据的标记语言,它让数据以一种结构化的方…

JavaWeb:SpingBoot原理 --黑马笔记

1. 配置优先级 在我们前面的课程当中,我们已经讲解了SpringBoot项目当中支持的三类配置文件: application.properties application.yml application.yaml 在SpringBoot项目当中,我们要想配置一个属性,可以通过这三种方式当中…

OpenCV Mat实例详解 三

OpenCV Mat实例详解 一、二介绍了,OpenCV Mat类构造函数及其公共属性。下面继续介绍OpenCV Mat类公有静态成员函数 OpenCV Mat类公有静态成员函数(Static Public Member Functions) static CV_NODISCARD_STD Mat diag (const Mat &d)&…

云计算基础-存储虚拟化(深信服aSAN分布式存储)

什么是存储虚拟化 分布式存储是利用虚拟化技术 “池化”集群存储卷内通用X86服务器中的本地硬盘,实现服务器存储资源的统一整合、管理及调度,最终向上层提供NFS、ISCSI存储接口,供虚拟机根据自身的存储需求自由分配使用资源池中的存储空间。…

超多有用的c++面试点笔记

1. 指针与引用的区别 指针与引用看上去完全不同(指针用操作符"*“和”->“,引用使用操作符”."),但是它们似乎有相同的功能。指针和引用都是让你间接引用其它对象。 **在任何情况下都不能使用指向空值的引用。**一个引用必须总是指向某些对…

代码随想录刷题笔记-Day17

1. 路径总和 112. 路径总和https://leetcode.cn/problems/path-sum/ 给你二叉树的根节点 root 和一个表示目标和的整数 targetSum 。判断该树中是否存在 根节点到叶子节点 的路径,这条路径上所有节点值相加等于目标和 targetSum 。如果存在,返回 true …

【蓝桥杯 2021】图像模糊

图像模糊 题目描述 小蓝有一张黑白图像,由 nm 个像素组成,其中从上到下共 n 行,每行从左到右 m 列。每个像素由一个 0 到 255 之间的灰度值表示。 现在,小蓝准备对图像进行模糊操作,操作的方法为: 对于…

循序渐进-讲解Markdown进阶(Mermaid绘图)-附使用案例

Markdown 进阶操作 查看更多学习笔记:GitHub:LoveEmiliaForever Mermaid官网 由于CSDN对某些Mermaid或Markdown语法不支持,因此我的某些效果展示使用图片进行 下面的笔记内容全部是我根据Mermaid官方文档学习的,因为是初学者所以…

防火墙工作模式详解

防火墙工作模式是指防火墙在网络中的工作方式和策略。常见的防火墙工作模式包括以下几种: 1. 包过滤工作模式:根据事先确定的规则集合,对进出网络的网络包进行过滤和检查。根据规则,防火墙可以允许或阻止特定的网络流量。 2. 代…

记录 | windows pyqt5 pycharm配置

一、下载安装 离线安装 通过PyPI下载 https://pypi.org/ 依此搜索 python_dotenv,PyQt5_sip,PyQt5,pyqt5_tools,注意PyQt5和pyqt5_tools版本对应。 下载之后放在\Anaconda3\Lib\site-packagescmd依次 pip install *.whl 二…

人工智能学习与实训笔记(十四):Langchain Agent

0、概要 Agent是干什么的? Agent的核心思想是使用语言模型(LLM)作为推理的大脑,以制定解决问题的计划、借助工具实施动作。在agents中几个关键组件如下: Agent:制定计划和思考下一步需要采取的行动。Tools…

跟着pink老师前端入门教程-day27

三、变量 (一)变量概述 1、什么是变量 白话:变量就是一个装东西的盒子 通俗:变量是用于存放数据的容器,通过变量名获取数据,甚至数据可以修改 2、变量在内存中的存储 本质:变量是程序在内存…

Java毕业设计-基于ssm的网上餐厅管理系统-第72期

获取源码资料,请移步从戎源码网:从戎源码网_专业的计算机毕业设计网站 项目介绍 基于ssm的网上餐厅管理系统:前端jsp、jquery、bootstrap,后端 maven、springmvc、spring、mybatis,集成类名管理、菜品管理、订单管理…

(17)Hive ——MR任务的map与reduce个数由什么决定?

一、MapTask的数量由什么决定? MapTask的数量由以下参数决定 文件个数文件大小blocksize 一般而言,对于每一个输入的文件会有一个map split,每一个分片会开启一个map任务,很容易导致小文件问题(如果不进行小文件合并&…

C# CAD 框选pdf输出

在C#中进行AutoCAD二次开发时,实现框选(窗口选择)实体并输出这些实体到PDF文件通常涉及以下步骤: public ObjectIdCollection GetSelectedEntities() {using (var acTrans HostApplicationServices.WorkingDatabase.Transaction…

代码随想录算法训练营29期Day52|LeetCode 198,213,337

文档讲解:打家劫舍 打家劫舍II 打家劫舍III 198.打家劫舍 题目链接:https://leetcode.cn/problems/house-robber/description/ 思路: 设dp[i]:考虑下标i(包括i)以内的房屋,最多可以偷窃的金…

Sora:AI视频生产力的颠覆性跃进,让创意瞬间成“视界”!

在AI视频技术宇宙中,RunwayGen2、Stable Video Diffusion和Pika等明星产品早已名声在外。然而,今日横空出世的Sora犹如一颗璀璨新星,以其震撼性的创新突破,在视频制作领域掀起了一场革命!相较于市面上同类AI视频神器&a…

【洛谷 P3367】【模板】并查集 题解(并查集+启发式合并)

【模板】并查集 题目描述 如题,现在有一个并查集,你需要完成合并和查询操作。 输入格式 第一行包含两个整数 N , M N,M N,M ,表示共有 N N N 个元素和 M M M 个操作。 接下来 M M M 行,每行包含三个整数 Z i , X i , Y i Z_i,X_i,Y…

力扣57题:插入区间

题目链接】 力扣&#xff08;LeetCode&#xff09;官网 - 全球极客挚爱的技术成长平台 【解题代码】 class Solution {public int[][] insert(int[][] intervals, int[] newInterval) {List<int[]> intervalList new ArrayList<>();boolean newIntervalInsert …