单点登录(SSO)

2023-05-16

单点登录概述:
        多系统共存下,用户在一处地方登录,得到其他所有系统的信任,无需再次登录。

        在前端用户点击登陆之后触发后端的登录接口,用户名密码验证通过之后,自动生成一个JWT token令牌并返回给前端,前端将其放到接口的请求头当中,并存储。之后用户访问其他页面时自动从请求头中的Authorization中获取当前用户信息,验证通过用户可以进入,否则提示用户登录。

理解:在前端用户点击登录触发后端登录接口,登录成功的时候,后端jwt生成一个token,后端将token返给前端,前端把token放进需要进行验证的接口的请求头(header)中去,用户带着这个token去进行验证。(token设置过期时间),验证成功则拦截器放行,否则拦截

这里介绍一些jwt基本概念

JWT认证流程


        1.首先,前端通过web表单将自己的用户民和密码发送到后端的接口,这一过程一般是一个HTTP,POST请求。建议的方式是通过SSL加密的方式传输(https协议),从而避免敏感信息被嗅探。


        2.后端核对用户名和密码成功后,将用户的id等其他信息作为JWT Payload(负载),将其与头部分别进行Base64编码拼接后签名,形成一个JWT(token),形成的JWT就是一个形同111.zzz.xxx的字符串, token,head ,payload, singurater


        3.后端将JWT字符串 作为登录成功的返回结果返回给前端,前端可以返回的结果保存在localStorage 或sessionStorage上,退出登录时前端删除保存的JWT即可。


        4.前端在每次请求时将JWT放入HTTP Header中的Authoriztion 位。(放在Header中的原因是解决XSS和XSRF问题) HEADER.


        5.后端检查是否存在,如存在验证JWT的有效性。例如,检查签名是否正确;检查Token是否过期;检查Token的接收方是否是自己(可选)


        6.验证通过后,后端使用JWT包含的用户信息进行其他逻辑操作,返回相应结果。


JWT优势

  • 可以通过URL,POST参数或者在HTTP,header发送 ,因为数据量小,传输速度也很快。
  • 自包含(self-contained): 负载中包含了所有用户所需要的信息,避免了多次查询数据库。
  • 因为Token是以JSON加密的形式保存在客户端的,所以JWT是跨语言的,原则上任何web形式都支持。
  • 不需要在服务端保存会话信息,特别适用于分布式微服务。

JWT结构


令牌组成
        token 其实就相当于一段字符串 ==> token String ==>header.payload.singnature =token
                1.标头(Header)
                2.有效载荷(Payload)
                3.签名(Signature)
因此,JWT通常如下所示:xxxx.yyyy.zzzz

                                      标头 载荷  签名

JWT常见异常信息

  • SignatureVerificationException  签名不一致
  • TokenExpiredException  令牌过期异常
  • AlgorithmMismatchException  算法不匹配异常(也就是解密与加密的算法不一样)
  • InvalidClaimExeption 失效的Payload异常  (就是Payload加解密前后信息不一致)
     
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

单点登录(SSO) 的相关文章

  • java 哪些源码需要细看

    String Integer Long Enum Big ThreadLocal CloseLoader ArrayList amp LinkedLis Map HashMap Set
  • 算法中时间复杂度概括——o(1)、o(n)、o(logn)、o(nlogn)

    O后面的括号中作为一个函数 xff0c 指明某个算法的耗时 耗空间与数据增长量之间的关系 其中的n代表输入数据的量 比如时间复杂度为O n xff0c 就代表数据量增大几倍 xff0c 耗时也增大几倍 比如常见的遍历算法 再比如时间复杂度O
  • 怎么禁止/开启Ubuntu自动更新升级

    当你打开Ubuntu系统时经常会弹出软件更新升级提示框 xff0c 因为Ubuntu包括上面装的很多软件也都是开源系统 xff0c 更新升级是很频繁的 xff0c 对于经常弹出的更新提示无非是两种应对措施 xff0c 要么安装 xff0c
  • 六大设计模式

    单一职责 开闭原则 李氏替换原则 LSP 门面的实现 依赖倒转原则 DIP 服务指向契约 契约绑定实现 接口隔离原则 ISP 接口对应一种角色 最少知道原则 类之间的弱耦合 需要反复度量
  • centos安装jdk

    1 下载自己系统对应版本 2 到该文件所在目录执行命令 rpm ivh jdk 8u221 linux x64 rpm 3 默认安装在 usr java jdk1 8 0 221 amd64目录下 4 环境变量配置 xff1a cd etc
  • ESC上搭建spring boot

    一 打包项目 a 单击IDEA右上角Maven b 依次双击 demo gt Lifecycle gt package xff0c 开始打包 执行结果如下 xff0c 图中标记位置为打包后jar包的路径 二 运行ECS上的Java项目 执行
  • win10 安装配置mysql8

    1 下载 https tomcat apache org 选择自己需要的版本 2解压 3配置环境变量 略 4配置my ini 在 MYSQL HOME 下新建my int文件 xff0c 内容如下 span class token punc
  • idea调用javap

    idea 配置javap 具体参数设置如下 program span class token variable JDKPath span span class token punctuation span bin span class to
  • Rust Web(一)—— 自建TCP Server

    前段时间小小学习了一下Rust的基础内容 xff0c 出于学习Web开发的需求 xff0c 也为巩固学过的Rust基础 xff0c 就尝试记录一下自己学习 Rust Web 的点滴 xff1b 实现环境 OS Ubuntu 14 0 IDE
  • ajax传递数组怎么传?ajax数组传递

    在我们平时的开发中 xff0c 经常会需要用到ajax xff0c 关于ajax是什么 xff0c 又该如何传递参数 xff0c 相信通过上几篇文章你们已经有所了解 但是 xff0c ajax中要如何传递数组你们又知道吗 xff1f 今天我
  • linux安装node和达梦数据库8

    PS 本次测试只是为了项目需要 xff0c 但是在部署和启动程序的时候发生了一系列的报错 xff0c 由此记录下来为日后作参考 安装达梦数据库 1 达梦数据库 DM8 简介 达梦数据库管理系统是武汉达梦公司推出的具有完全自主知识产权的高性能
  • pyqt5+mysql+多线程爬虫实现 python 携程机票爬虫 数据可视化

    基本目录 数据来源与获取方法数据来源网页分析 实现效果完整代码与说明文档 数据来源与获取方法 数据来源 携程机票查询https flights ctrip com online channel domestic 网页分析 我们的目的是要爬取
  • debian9.8添加iso为本地源

    1 临时添加 使用mount临时挂载 注意需要在root权限下操作 一 将系统镜像文件复制到电脑任意路径下 xff0c 我这里复制到 home路径下 二 自己创建一个挂载目录 xff0c 我创建的是 mnt cdrom目录 xff0c 命令
  • 剖析AVFrame

    AVFrame是FFmpeg中非常重要的数据结构 xff0c 其封装了解码后的媒体数据 在FFmpeg之中 xff0c 有几个比较重要的音视频概念 xff1a pixel format xff1a 表示像素格式 xff0c 图像像素在内存中
  • The package javax.swing is not accessible错误的三种解决办法,亲测有效

    万次阅读 xff0c 150 43 点赞 xff0c 如若对您有帮助 xff0c 请及时点赞 xff0c 不要白嫖 解决办法 xff1a 更换JRE系统库的版本解决办法 xff1a 另外一个比较暴力的解决办法是点击java swing 解决
  • error: binding reference of type int& to const int discards qualifiers

    span class token macro property span class token directive keyword include span span class token string lt iostream gt s
  • request for member in , which is of pointer type

    原因 其实就是因为结构体成员引用符 34 34 和指针的箭头运算符 gt 用错了 只要根据自己的代码把 点 和 gt 改回去就行了
  • 结构体对齐问题(转)

    一个结构体变量定义完之后 xff0c 其在内存中的存储并不等于其所包含元素的宽度之和 例一 xff1a span class token macro property span class token directive keyword i
  • java.net.SocketException: Broken pipe (Write failed)发生原因及其解决办法

    先运行B main 再运行A main 先运行B的main xff0c 然后由于B有accepte的执行 xff0c 所以B那块先阻塞 xff0c 然后点击执行A main的时候会执行A的socket连接 xff0c 然后B监听到了之后立即
  • Matlab进行多项式拟合

    觉得有用的先点赞后收藏 xff0c 不要只收藏不点赞 xff01 xff01 1 一个坐标系里面绘制多个函数图像 clear clc x span class token operator 61 span span class token

随机推荐

  • K-Means聚类算法及其python实现(已附上代码至本博客)

    目录 一 算法公式讲解二 算法流程三 算法实现代码四 代码结果分析五 K Means库函数六 K Means算法时间复杂度 一 算法公式讲解 对于 n代表了x有n维 xff0c x上标j表示第j维的特征 xff0c 下标i表示该向量是第i个
  • The server quit without updating PID file

    我本地Mac电脑爆的错误 xff01 xff01 xff01 总体解决办法有两个 xff0c 方法一 1 可能是 usr local MySQL data mysqld pid文件没有写的权限 解决方法 xff1a 给予权限 xff0c 执
  • Could not find artifact com.github.pagehelper:pagehelper-spring-boot:jar:1.4

    我的情况是导入1 4 2版本的pagehelper spring boot就爆错 xff0c 但是导入了1 3 0版本的pagehelper spring boot就不爆错了 xff0c 后面又导入了一次1 4 2版本的pagehelper
  • No primary or single public constructor found for interface java.util.List

    我的爆错原因是途中ids忘记标注注解 64 PathVariable了 xff0c 因为要传入一系列的整数的列表对象到路径 emps deleteEmps ids 中 xff0c 所以我这里就是加上注解 64 PathVariable就OK
  • 数据结构之用堆栈判断回文

    回文判断 回文是指正读反读均相同的字符序列 xff0c 如 abba 和 abdba 均是回文 xff0c 但 good 不是回文 编写一个程序 xff0c 使用栈判定给定的字符序列是否为回文 输入格式 输入待判断的字符序列 xff0c 按
  • 单片机外部中断实验

    目录 1 概述 2 原理 3 硬件和软件设备 4 步骤 5 结果 xff08 分析 xff09 1 概述 联系程序设计 xff0c 并熟悉外部中断和按钮的使用 xff1b 掌握单片机外部中断程序的设计方法 xff1b 在外部中断0处接一个开
  • 自定义Rust安装路径,自定义安装Rust

    首先我们知道使用https www rust lang org zh CN tools install官方下载器下载安装的rust主要有两个文件夹 xff0c 而且会默认生成到C盘下 但是 xff0c 我们通过修改环境变量可以自定义安装路径
  • HTML基础(一)

    本文是作者在学习html过程中对知识的初步整理 1 第一个程序 span class token doctype lt DOCTYPE html gt span span class token tag span class token t
  • 结构体的数组

    结构数组 也就是结构体的数组 的组成 xff1a struct 结构名 变量名 数组大小 span class token macro property span class token directive hash span span c
  • kali详细安装教程

    vmware虚拟机下载地址 xff1a https www vmware com cn products workstation pro workstation pro evaluation html kali ISO镜像 https cd
  • Armbian (jammy) 上安装 Docker

    一 Armbian 的软件源配置 Ubuntu 的软件源配置文件是 etc apt sources list 默认注释了源码镜像以提高 apt update 速度 xff0c 如有需要可自行取消注释 deb https mirrors tu
  • c语言结构体中的冒泡排序

    题目 xff1a 使用结构体以及函数 xff0c 首先录入学生信息 xff0c 依据学生成绩 xff0c 对学生相关信息进行排序 include lt stdio h gt include lt string h gt struct stu
  • csp序列查询(C语言)

    csp序列查询 span class token macro property span class token directive hash span span class token directive keyword include
  • 数据库学习

    数据库学习 一 span class token keyword SELECT span span class token operator span span class token keyword FROM span customers
  • Spring框架-ioc和JdbcTemplate

    前提 xff1a 我们用了Mybatis时 xff0c 已经不需要再使用其他的持久层框架了 用了mybatis之后 xff0c 我们只需要写持久层接口以及sql语句即可 但是为了讲解spring中的事务 xff0c 我们把JdbcTempl
  • 发送Promise请求出现以下错误origin ‘null‘ has been blocked by CORS policy

    错误如下 Access to XMLHttpRequest at span class token string 39 http localhost 9090 data 39 span from origin span class toke
  • VB.net与VB6 调用Websocket功能的方法--Websocket For VB

    概述 Websocket 功能在现今的通信应用开发中越来越普遍 xff0c 因为Websocket的消息机制 xff0c 在应用程序进行即时通信时使用非常合适 xff0c 而且Websocket 是长连接方式 xff0c 比起以前的http
  • sql当前日期

    查询本周 从周一开始计算 1 7 从周日开始计算就删除1 7 SELECT FROM 表名 WHERE YEARWEEK date format 时间字段 39 Y m d 39 1 61 YEARWEEK now 7 查询当月 SELEC
  • 【乐视秒杀架构】每秒处理10万请求—数据库分库分表

    随着乐视硬件抢购的不断升级 xff0c 乐视集团支付面临的请求压力百倍乃至千倍的暴增 作为商品购买的最后一环 xff0c 保证用户快速稳定的完成支付尤为重要 所以在15年11月 xff0c 我们对整个支付系统进行了全面的架构升级 xff0c
  • 单点登录(SSO)

    单点登录概述 xff1a 多系统共存下 xff0c 用户在一处地方登录 xff0c 得到其他所有系统的信任 xff0c 无需再次登录 在前端用户点击登陆之后触发后端的登录接口 xff0c 用户名密码验证通过之后 xff0c 自动生成一个JW