为什么使用双token实现无感刷新用户认证?

news/2024/7/27 15:23:34/文章来源:https://blog.csdn.net/zxcvb0825/article/details/135596329

单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相关接口应该收到一个严格的控制,仅限于可性的客户端才能进行对应的访问处理

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

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

相关文章

在程序中链接静态库 和 动态库

9. 链接库 在编写程序的过程中,可能会用到一些系统提供的动态库或者自己制作出的动态库 或者静态库文件,cmake中也为我们提供了相关的加载动态库的命令hehedalinux:~/Linux/loveDBTeacher-v3$ tree . ├── CMakeLists.txt ├── include │ └── …

远程开发之vscode端口转发

远程开发之vscode端口转发 涉及的软件forwarded port 通过端口转发,实现在本地电脑上访问远程服务器上的内网的服务。 涉及的软件 vscode、ssh forwarded port 在ports界面中的port字段,填需要转发的IP:PORT,即可转发远程服务器中的内网端…

Monorepo-uniapp 构建分享

Monorepo uniapp 构建灵感:刚好要做一个项目,于是想到升级一下之前自己写的一个vue3tspiniauno的模版框架,其实那个框架也不错;只是感觉还差点东西,我已经用那个小框架写了两三个项目;轻巧实用。为什么选…

idea使用docker-compose发布应用程序

非常重要的话说在前头 idea要想使用docker-compose,不能使用ssh创建idea Docker,而需要使用socket创建idea Docker。 socket docker是不安全的,任何人都可以访问你的docker,所以只能测试环境使用,请勿在正式环境使用s…

ubuntu安装mysql(tar.xz)

0:本机Ubuntu的版本为 腾讯云 18.04 1:下载地址 MySQL :: 下载 MySQL 社区服务器 2:上传文件到服务器 3:解压 sudo sumv mysql-8.2.0-linux-glibc2.17-x86_64-minimal.tar.xz /usrtar -xvf mysql-8.2.0-linux-glibc2.17-x86_6…

推荐一款.NET开发的物联网开源项目

物联网(IoT)是一个正在快速发展的技术领域,它涉及到各种设备、物体和系统的互联。所以各种物联网平台和物联网网关项目层出不穷,在物联网(IoT)领域,.NET平台扮演着重要的角色。作为一款广泛使用…

【日常聊聊】ChatGPT和文心一言哪个更好用

🍎个人博客:个人主页 🏆个人专栏: 日常聊聊 ⛳️ 功不唐捐,玉汝于成 目录 前言 正文 介绍 哪个在文本生成上有优势 结语 我的其他博客 前言 随着人工智能技术的不断发展,自然语言处理领域也取得了显…

C语言从入门到实战——数据在内存中的存储方式

数据在内存中的存储方式 前言1. 整数在内存中的存储2. 大小端字节序和字节序判断2.1 什么是大小端2.2 为什么有大小端2.3 练习2.3.1 练习12.3.2 练习22.3.3 练习32.3.4 练习42.3.5 练习52.3.6 练习6 3. 浮点数在内存中的存储3.1 练习3.2 浮点数的存储3.2.1 浮点数存的过程3.2.2…

C++ 多态

文章目录 多态的概念虚函数抽象类多态的原理虚函数指针与虚函数表多继承与虚函数表菱形虚拟继承 动态绑定与静态绑定 多态的概念 多种状态 —— 不同对象去完成某个行为,会有不同的状态 虚函数 virtual void Func(){;} //虚函数,和之前的虚继承没什么…

华为设备端口镜像设置

核心代码: observe-port int 编号 int 编号 mirror to observe-port both | inbound | outbound #both:将镜像端口的入和出流量同时复制到观察者端口 #inbound:将镜像端口的入流量复制到观察者端口 #outbound:将镜像端口的出流量复制到观察者端口配置后可使出入端口…

解决ELK日志收集中Logstash报错的关键步

ElK执行日志收集的时候logstash报错: Failed to execute action {:action>LogStash::PipelineAction::Create/pipeline_id:main, :exception>“LogStash::ConfigurationError”, :message>“Expected one of [^\r\n], “\r”, “\n” at line 88, column 4…

C++学习笔记——标准模板库

目录 一、简介 二、STL概述 2.1STL是什么? 2.2STL的优势 三、容器(Containers) 3.1序列式容器(Sequence Containers) 3.2关联式容器(Associative Containers) 3.3容器适配器(…

python统计分析——操作案例(模拟抽样)

参考资料:用python动手学统计学 import numpy as np import pandas as pd from matplotlib import pyplot as plt import seaborn as snsdata_setpd.read_csv(r"C:\python统计学\3-4-1-fish_length_100000.csv")[length] #此处将文件路径改为自己的路…

centos 7 上如何安装chrome 和chrome-driver

centos 7 上如何安装chrome 和chrome-driver 查找自己的服务器是什么系统 cat /etc/os-release这里以centos linux 7为例 下载google-chrome安装包 wget https://dl.google.com/linux/direct/google-chrome-stable_current_x86_64.rpm安装chrome sudo yum localinstall go…

从 PDF 删除PDF 页面的 10 大工具

PDF 文件是全世界几乎每个人最常用的页面之一。借助 PDF 文件,您可以通过任何在线或离线媒体轻松共享信息。但是,如果您想编辑这些 PDF 文件,那么这个过程就很难改变,因为保持文件的原始形式和质量很重要。应该注意的是&#xff0…

机器学习激活函数

激活函数 激活函数是人工神经网络中的一个重要组成部分。它们用于向神经网络中添加非线性因素,使得网络能够解决复杂问题,如图像识别、语言处理等。激活函数的作用是决定一个神经元是否应该被激活,也就是说,它帮助决定神经元的输…

NLP论文阅读记录 - 2022 | WOS 用于摘要法律文本的有效深度学习方法

文章目录 前言0、论文摘要一、Introduction1.1目标问题 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结 前言 Effective deep learning approaches for summarization of legal texts(22&#x…

android 13.0 Launcher3长按app弹窗设置为圆角背景功能实现二

1.前言 在13.0的系统ROM定制化开发中,在进行一些Launcher3的定制化开发中,在使用app的弹窗的功能时,会弹出应用信息和 微件之类的内容,所以在定制需求中,需要默认设置为圆角背景,接下来就来分析下相关功能的实现如图: 2.Launcher3长按app弹窗设置为圆角背景功能实现二的…

基于深度学习的婴儿啼哭识别项目详解

基于深度学习的婴儿啼哭识别项目详解 基于深度学习的婴儿啼哭识别项目详解一、项目背景1.1 项目背景1.2 数据说明 二、PaddleSpeech环境准备三、数据预处理3.1 数据解压缩3.2 查看声音文件3.3 音频文件长度处理 四、自定义数据集与模型训练4.1 自定义数据集4.2 模型训练4.3 模型…

【ACL 2023】 The Art of Prompting Event Detection based on Type Specific Prompts

【ACL 2023】 The Art of Prompting: Event Detection based on Type Specific Prompts 论文:https://aclanthology.org/2023.acl-short.111/ 代码:https://github.com/VT-NLP/Event_APEX Abstract 我们比较了各种形式的提示来表示事件类型&#xff0…