为什么使用双token实现无感刷新用户认证?
单token机制
认证机制:对与单token的认证机制在我们项目中仅使用一个Access Token的访问令牌进行用户身份认证和授权的方案处理。
不足之处:
- 安全性较低(因为只有一个token在客户端和服务器端之间进行传递,一目Acess Token被截获或者被泄露,攻击者就会在有效时间内完成模拟用户行为,访问所有受保护资源)
 - 短有效期策略限制无法撒销会话(为了提高安全性access token通常设置的时间是比较短的,然而需要频繁的去获取access token.影响的是用户的体验,尤其是长时间操作或者是后台的服务场景下就会遇到一个瓶矜,而且也无法撤销对应的汇报,如果某个token被盗用了,难以立即撤销这个token的有效性,从而不能立即中断攻击者的访问权限)
 - 无代态刷新问题(若要自动去刷新token维持长期的绘画,单token的机制需要将刷新的逻辑耦合到具体的业务流程当中,这就会增加复杂性和潜在的安全风险)
 - 没有权限细分管理(单一的access token包含所有的授权信息,不易于对不同范文或者是力度的一个资源进行精细化的访问控制)
 
双Token机制
操作机制:双Token主要包含了AccessToken (访问令牌) 和 RefreshToken (刷新令牌),它的出现就是为了解决单token的不足,所以才会引入双token的机制也就是 RefreshToken (刷新令牌),因为它可以延长实际的绘画时间,用户提供了一种安全的方式来去更新AccessToken,并且在必要的时候撤销特定用户的权限,而并不会影响有效的绘画内容。
实时上双token的机制是 o os 2.0标准中常见的一种实现,主要包含两个类型的token,一个是AccessToken (访问令牌) ,一个是RefreshToken (刷新令牌)
AccessToken (访问令牌):它会设置一个有效时间较短的令牌内容,用于的是用户每次请求受保护资源时,进行身份验证的操作,通常直接包含在api请求头或者是URL地址参数之中,用于证明客户端其实是有权限去访问特定的资源的
RefreshToken (刷新令牌):刷新令牌,会设置一个有效时间比较长并且安全存储比较高的一个令牌,主要用于AccessToken过期了以后,去重新获取AccessToken的操作内容。我们并不需要用户去提供一个特殊的登录凭证。因为RefreshToken 一般不会频繁的在网络上进行传输,目的就是为了降低被截取的一个风险
双token有很多优势:
- 安全性提升(因为AccessToken和RefreshToken其实是会被分离的,即使AccessToken被盗用了,但是由于有效时间是比较短的,损失还是可以控制的,同时RefreshToken的安全性则会变的更高,一般还不暴露在网络的传输过程当中,攻击者其实很难窃取到AccessToken长期的有效访问权限)
 - 用户体验优化(RefreshToken可以实现无感知的token刷新,也就是我们所说的无感刷新,因为当AccessToken失效的时候,客户端就会自动去刷新AccessToken,利用的就是RefreshToken,用户并不需要进行一个重新的登录,从而保证操作的连贯性)
 - 权限控制灵活(而且双token机制还有很好的权限控制灵活性,可以通过控制RefreshToken的有效期,刷新次数等方式来灵活的管理用户的绘画生命周期,并且在必要的时候去撤销RefreshToken的内容从而终止后续所以AccessToken的一个访问生成)
 
双token流程

用户登录(主要是用户通过用户名或者是用户码或者其他凭证向服务器去进行访问)---->
验证通过?(验证我们的一个身份,然后服务器,将会设置一个请求授权)---->
颁发Access Token & Refresh Token(当认证成功了以后,颁发两个内容,一个是Access Token 另一个 Refresh Token,Access Token是一个短期的token(比如几十分钟),Refresh Token是一个长期的token(比如可以设置几天或者更长的时间),这两个token都会返回客户端)----->
 客户端存储tokens(并且客户端会进行对应的存储)--->
客户端使用Access Token访问受保护资源(查看Access Token是否已经有过期的风险,当Access Token即将或者已经过期了后,客户端用Refresh Token向服务器发送一个新的请求,获取新的Access Token,服务器验证Refresh Token有效,如Refresh Token有效就会颁发一个新的Access Token,当然在此过程中有两种不同的情况,一种是并不会刷新Refresh Token还有一种在申请Access Token的时候还可能会重新生成Refresh Token,那么这两个token的有效期时间会从当前的时间段往回深延,具体的选择需要根据实际的业务情况进行策略的抉择)--->
 客户端更新存储的tokens(客户端接收到新的Access Token以后则需要替换原来的Access Token,并且在新访问的时候则使用新的token进行一个访问)
应用场景:
实时上双token我们可以应用到,单点登录,移动应用或者是web网站应用当中,或者是第三方授权操作处理等
注意事项:
Refresh Token安全的存储,需要去确定客户端确保Refresh Token在本地实现更为安全的存储操作,需要去避免被泄露,被篡改,而且对应Refresh Token需要去实时更为合理的生命周期管理和失效的策略,包括并且不限于我们响应的倒退时间还得去考虑何时更新或者是废除Refresh Token,我们需要考虑并发的处理,防止同一个Refresh Token在同一时刻被多次刷新Access Token,目的就是为了防止我们的攻击行为,那么当用户进行系统退出的时候,注销的不光是Access Token还得将Refresh Token也进行一个一统删除,确保用户在进行后续操作的时候无法在获得最新的一个授权,那么对于访问的限制,Refresh Token相关接口应该收到一个严格的控制,仅限于可性的客户端才能进行对应的访问处理
相关文章:
为什么使用双token实现无感刷新用户认证?
单token机制 认证机制:对与单token的认证机制在我们项目中仅使用一个Access Token的访问令牌进行用户身份认证和授权的方案处理。 不足之处: 安全性较低(因为只有一个token在客户端和服务器端之间进行传递,一目Acess Token被截获或者被泄露…...
论文阅读 Self-Supervised Burst Super-Resolution
这是一篇 ICCV 2023 的文章,主要介绍的是用自监督的方式进行多帧超分的学习 Abstract 这篇文章介绍了一种基于自监督的学习方式来进行多帧超分的任务,这种方法只需要原始的带噪的低分辨率的图。它不需要利用模拟退化的方法来构造数据,而且模…...
Spring+SpringMVC+Mybatis进行项目的整合
Spring SpringMVCM Mybatis 整合 一、 通过idea创建maven工程 二、 引入依赖项以及导入mybatis逆向工程的插件 将如下的文件替换所在工程的pom文件 <?xml version"1.0" encoding"UTF-8"?><project xmlns"http://maven.apache.org/POM/4…...
vue3 实现简单计数器示例——一个html文件展示vue3的效果
目的:作为一个新手开发,我想使用 Vue 3 将代码封装在 HTML 文件中时,进行界面打开展示。 一、vue计数示例 学了一个简单计数器界面展示,代码如下: <!DOCTYPE html> <html lang"en"><head&…...
面试经典150题(88-89)
leetcode 150道题 计划花两个月时候刷完,今天(第四十四天)完成了2道(88-89)150: 88.(22. 括号生成) 题目描述: 数字 n 代表生成括号的对数,请你设计一个函数,用于能够生成所有可能的并且 有效…...
【设计模式-3.3】结构型——享元模式
说明:说明:本文介绍设计模式中结构型设计模式中的,享元模式; 游戏地图 在一些闯关类的游戏,如超级玛丽、坦克大战里面,游戏的背景每一个关卡都不相同,但仔细观察可以发现,其都是用…...
【征服redis6】Redis的内存淘汰详解
目录 1.redis的基本策略 2.Redis中的缓存淘汰策略 3.Redis内存不足的情况 4.几种淘汰策略的实现原理 5.项目实践与优化策略 5.1 配置案例 5.2 项目优化策略参考 数据库存储会将数据保存到磁盘中,而Redis的核心数据是在内存中的,而Redis本身主要用来…...
多文件转二维码的两种方式,有兴趣的了解一下
多个文件能一键生成二维码吗?二维码是现在很多人用来展示文件内容的一种手段,在制作二维码图片之后,其他人扫码就可以查看文件或者下载文件,有效的提升文件获取的效率。一般情况下,文件二维码分为多个文件生成一个二维…...
uniapp APP接入Paypal
1. 登录paypal开发者中心, 2. 选择 Apps & Credentials 点击 Create App创建应用,创建后点击编辑按钮,如图: 3. 进入应用详情,勾选Log in with PayPal点击 Advanced Settings 添加return URL等信息并保存。如图&a…...
QT-贪吃小游戏
QT-贪吃小游戏 一、演示效果二、关键程序三、下载链接 一、演示效果 二、关键程序 #include "Snake.h" #include "Food.h" #include "Stone.h" #include "Mushroom.h" #include "Ai.h" #include "Game.h" #inclu…...
HubSpot:如何设计和执行客户旅程?
在当今数字化时代,企业成功的关键之一是建立并优化客户旅程。HubSpot作为一体化市场营销平台,通过巧妙设计和执行客户旅程,实现了个性化决策,关键节点的精准引导,为企业带来了数字化转型的引领力。 一、HubSpot是如何设…...
【Go学习】macOS+IDEA运行golang项目,报command-line-arguments,undefined
写在前面的话:idea如何配置golang,自行百度 问题1:通过idea的terminal执行go test报错 ✘ xxxxxmacdeMacBook-Pro-3  /Volumes/mac/.../LearnGoWithTests/hello  go test go: go.mod file not found in current directory or any parent …...
优先看我的博客:工控机 Ubuntu系统 输入密码登录界面后界面模糊卡死,键盘鼠标失效(不同于其他博主的问题解决方案,优先看我的博客。)
工控机Ubuntu 输入密码登录界面后界面模糊卡死,键盘鼠标失效 (不同于其他博主的问题解决方案,工控机Ubuntu的系统 优先看我的博客。) 系统版本:ubuntu18.04 主机:工控机 应用场景:电力系统巡…...
SAP 中的外部接口:预扣税
文章目录 1 Introduction2 implementation3 Summary 1 Introduction We use BP create WTAX_TYPE ,I don’t find a bapi. We will update for it . We will impement WTax type , WTax code ,Subject in the ‘BP’. 2 implementation UPDATE lfbw SET witht gs_alv-wit…...
代码随想录算法训练营第二十三天| 669. 修剪二叉搜索树、108.将有序数组转换为二叉搜索树、538.把二叉搜索树转换为累加树
669. 修剪二叉搜索树 题目链接:力扣(LeetCode)官网 - 全球极客挚爱的技术成长平台 解题思路:如果当前结点小于所给区间,那该节点及其左子树肯定不符合条件,返回其右子树作为上一结点子树;反之…...
设计模式——解释器模式
解释器模式(Interpreter Pattern)是一种行为型设计模式,它提供了一个框架,用于定义语言的语法规则,并通过这些规则来解析和解释特定语法结构表示的句子。这种模式主要应用于需要对简单语言进行解释或编译的小型系统中。…...
uniapp小程序当页面内容超出时显示滚动条,不超出时不显示---样式自定义
使用scroll-view中的show-scrollbar属性 注意:需要搭配enhanced使用 否则无效 <scroll-view class"contentshow" scroll-y :show-scrollbartrue :enhancedtrue><view class"content" :show-scrollbartrue><text>{{vehicleCartinfo}}<…...
开源28181协议视频平台搭建流程
最近项目中用到流媒体平台,java平台负责信令部分,c平台负责流媒体处理,找了评分比较好的开源项目 https://gitee.com/pan648540858/wvp-GB28181-pro 流媒体服务基于 c写的 https://github.com/ZLMediaKit/ZLMediaKit 说明文档:h…...
安全跟我学|网络安全五大误区,你了解吗?
网络安全 尽管安全问题老生常谈,但一些普遍存在的误区仍然可能让企业随时陷入危险境地。为了有效应对当前层出不穷且不断变换的网络威胁,最大程度规避潜在风险,深入了解网络安全的发展趋势必不可少。即使部署了最新且最先进的硬件和解决方案…...
数据结构奇妙旅程之二叉树初阶
꒰˃͈꒵˂͈꒱ write in front ꒰˃͈꒵˂͈꒱ ʕ̯•͡˔•̯᷅ʔ大家好,我是xiaoxie.希望你看完之后,有不足之处请多多谅解,让我们一起共同进步૮₍❀ᴗ͈ . ᴗ͈ აxiaoxieʕ̯•͡˔•̯᷅ʔ—CSDN博客 本文由xiaoxieʕ̯•͡˔•̯᷅ʔ 原创 CSDN …...
云原生核心技术 (7/12): K8s 核心概念白话解读(上):Pod 和 Deployment 究竟是什么?
大家好,欢迎来到《云原生核心技术》系列的第七篇! 在上一篇,我们成功地使用 Minikube 或 kind 在自己的电脑上搭建起了一个迷你但功能完备的 Kubernetes 集群。现在,我们就像一个拥有了一块崭新数字土地的农场主,是时…...
PL0语法,分析器实现!
简介 PL/0 是一种简单的编程语言,通常用于教学编译原理。它的语法结构清晰,功能包括常量定义、变量声明、过程(子程序)定义以及基本的控制结构(如条件语句和循环语句)。 PL/0 语法规范 PL/0 是一种教学用的小型编程语言,由 Niklaus Wirth 设计,用于展示编译原理的核…...
服务器--宝塔命令
一、宝塔面板安装命令 ⚠️ 必须使用 root 用户 或 sudo 权限执行! sudo su - 1. CentOS 系统: yum install -y wget && wget -O install.sh http://download.bt.cn/install/install_6.0.sh && sh install.sh2. Ubuntu / Debian 系统…...
管理学院权限管理系统开发总结
文章目录 🎓 管理学院权限管理系统开发总结 - 现代化Web应用实践之路📝 项目概述🏗️ 技术架构设计后端技术栈前端技术栈 💡 核心功能特性1. 用户管理模块2. 权限管理系统3. 统计报表功能4. 用户体验优化 🗄️ 数据库设…...
Docker 本地安装 mysql 数据库
Docker: Accelerated Container Application Development 下载对应操作系统版本的 docker ;并安装。 基础操作不再赘述。 打开 macOS 终端,开始 docker 安装mysql之旅 第一步 docker search mysql 》〉docker search mysql NAME DE…...
springboot整合VUE之在线教育管理系统简介
可以学习到的技能 学会常用技术栈的使用 独立开发项目 学会前端的开发流程 学会后端的开发流程 学会数据库的设计 学会前后端接口调用方式 学会多模块之间的关联 学会数据的处理 适用人群 在校学生,小白用户,想学习知识的 有点基础,想要通过项…...
Netty从入门到进阶(二)
二、Netty入门 1. 概述 1.1 Netty是什么 Netty is an asynchronous event-driven network application framework for rapid development of maintainable high performance protocol servers & clients. Netty是一个异步的、基于事件驱动的网络应用框架,用于…...
android13 app的触摸问题定位分析流程
一、知识点 一般来说,触摸问题都是app层面出问题,我们可以在ViewRootImpl.java添加log的方式定位;如果是touchableRegion的计算问题,就会相对比较麻烦了,需要通过adb shell dumpsys input > input.log指令,且通过打印堆栈的方式,逐步定位问题,并找到修改方案。 问题…...
华为OD机试-最短木板长度-二分法(A卷,100分)
此题是一个最大化最小值的典型例题, 因为搜索范围是有界的,上界最大木板长度补充的全部木料长度,下界最小木板长度; 即left0,right10^6; 我们可以设置一个候选值x(mid),将木板的长度全部都补充到x,如果成功…...
永磁同步电机无速度算法--基于卡尔曼滤波器的滑模观测器
一、原理介绍 传统滑模观测器采用如下结构: 传统SMO中LPF会带来相位延迟和幅值衰减,并且需要额外的相位补偿。 采用扩展卡尔曼滤波器代替常用低通滤波器(LPF),可以去除高次谐波,并且不用相位补偿就可以获得一个误差较小的转子位…...
