极客时间-如何降低用户鉴权的流量压力

news2024/12/22 19:02:33

背景

内容是极客时间-徐长龙老师的高并发系统实战课的个人学习笔记,欢迎大家学习!https://time.geekbang.org/column/article/596644

使用Session方式实现用户的用户鉴权

优点

信息都在服务端储存,对客户端不暴露任何用户敏感的数据信息

缺点

  1. Session Cache空间会变得很大
  2. Session Cache和各个子系统的耦合度极高,全站的请求都会对这个缓存至少访问一次

使用jwt登陆和token校验

用户登陆之后会将用户信息放到一个加密签名的token中,每次请求都把这个串放到header或者cookie内带到服务端。服务端解开这个token即可获取用户的信息

token=header+payload+signature

header: 保存加密算法类型

payload: 自定义的内容(用户昵称,uid,过期时间等等)

signature: 防篡改签名

解密

token,第一段和第二段通过base64编码

验证是否过期,其中的过期时间和本地时间对比一下即可

流程图

在这里插入图片描述

缺点

如果用户被拉黑了,客户端最快也要在token过期之后才能推出登陆,时效性较低

token的更换和离线

一般使用两种token=refresh_token+access_token

refresh_token用于更换access_token,有效期是30天;

access_token用于保存当前用户信息和权限信息,每隔15分钟更换一次

如果用户中心请求失败,APP处于离线状态,只要检测到本地的refresh_token没有过期,系统仍可以继续工作,直到refresh_token过期为止。

流程图

在这里插入图片描述

总结

个人理解:

其实Session和token的方式完全可以结合起来用

  1. Session 耦合性高,实时性高
  2. Token 耦合性不高,实时性低

问题

使用base64加密是不是不太安全?这样不是很容易知道你用什么加密算法了

这个算法重点并不是这个payload区,payload这里只是附带的数据,只是为了方便业务使用,事实上这个核心在于签名和过期时间,由于密钥是只有服务端有,所以签名是不能伪造的,如果到子业务这里验证签名是正确的密钥加密的,那么代表token的payload的内容肯定是服务器发放的,传输的用户无法更改,如果更改了就会和签名核对不上,通过这个方式就已经能够保证数据的安全了。至于base64内放的数据普遍是可以公开的信息,如果有不能公开的信息可以再做一层加密后再放入payload

用户如果更换了昵称,如何快速更换 token 中保存的用户昵称呢?

  1. 客户端可以缓存修改后的昵称,直到更换了access token再清除缓存,类似弹幕本地先发送让用户自己认为发送成功
  2. 有些为了业务方便,token可以有额外的信息放在结尾,如果这个信息用户常修改则不应该放在token里面,单独弄个接口不是直接解决问题。

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

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

相关文章

SQL-修改表操作

目录 DDL-表操作-修改 添加字段 (方括号内容可选) 修改字段 修改指定字段的数据类型 修改字段名和字段类型 删除字段 修改表名 删除表 删除指定表,并重新创建该表 总结 🎉欢迎您来到我的MySQL基础复习专栏 ☆* o(≧▽≦…

Window平台安装MongoDB

在部署前需要在官网先确定系统对应的Mongo DB版本。 本机电脑为Window10,所以这里以MongoDB 6.0版本。 1 在官网下载安装包 2 安装MongoDB MongoDB Compass 是一个图形界面管理工具,如果勾选了安装会花费长一点时间,可以取消掉勾选&#xff…

[UI5] ODATA V4中的CRUD

文章目录 前言一、Read二、Create三、Update四、Delete 前言 ODATA V4在CRUD方面与V2截然不同。 这篇文章简单介绍V4中是如何进行CRUD操作 一、Read Model不再有read方法, 一般是把Path绑定到View中进行读取, 如果需要额外的读取数据,可使用…

树状结构查询 - 华为OD统一考试

OD统一考试 分值: 200分 题解: Java / Python / C 题目描述 通常使用多行的节点、父节点表示一棵树,比如: 西安 陕西 陕西 中国 江西 中国 中国 亚洲 泰国 亚洲 输入一个节点之后,请打印出来树中他的所有下层节点。 …

Python: Spire.PDF-for-Python

# encoding: utf-8 # 版权所有 2024 ©涂聚文有限公司 # 许可信息查看: # 描述: # Author : geovindu,Geovin Du 涂聚文. # IDE : PyCharm 2023.1 python 3.11 # Datetime : 2024/1/11 10:32 # User : geovindu # Product : PyChar…

TypeScript类型挑战:实现内置的Omit实用类型

掌握 TypeScript Omit 泛型,一起完成 Type 挑战,巩固 TypeScript 知识。 为了帮助读者更好地巩固 TypeScript 的知识,我从 Github 上的 type-challenges 库中选择了几十个挑战,与您一起完成类型挑战。 挑战 实现内置的 Omit&…

分布式系统架构设计之分布式消息队列的水平扩展性、安全可用性以及监控与调优

一、分布式消息队列的水平扩展 随着业务的快速发展和数据的不断增长,单一的消息队列服务器往往难以满足高并发、高可用和高吞吐量的需求,因此,如何实现消息队列的水平扩展成为了一个重要的问题。这部分我将从分区、副本、负载均衡等关键概念…

影响eCPM的因素有哪些?如何提升eCPM?

eCPM(千次展示有效收益)直接关系广告变现收益的高低,是开发者们最关心的数据之一。要想优化提升eCPM,首先要了解哪些主要因素影响eCPM,再针对性优化广告库存,提高变现收益。 https://www.shenshiads.com …

线性回归实例

1、线性回归(linear Regression)和逻辑回归(logistic Regression)的区别 线性回归主要是用来拟合数据,逻辑回归主要是用来区分数据,找到决策边界。 线性回归的代价函数常用平方误差函数,逻辑回…

java每日一题——打印100以内个位和十位相同,尾数为1,3,5,7的数字

前言: 打好基础,daydayup! 题目:打印100以内个位和十位相同,尾数为1,3,5,7的数字 思路:1,个位通过对10求余数可求出1,3,5,7; 2,十位可通过先除10…

【Unity】【Pico】【VR开发】为何PICO打包后真机运行闪退

【背景】 设置步骤,项目配置都没问题,Build也成功,Unity版本是符合要求的2022LTS版本,但是一在真机上运行就闪退。 【分析】 由于并没有开版权验证,而且闪退后也并没有弹框说版权问题,所以还是怀疑环境有…

软件测试|Python成员运算符:使用方法与元素检查

简介 Python是一种功能强大的编程语言,提供了许多方便的工具来处理数据和集合。其中之一就是成员运算符,它允许我们在集合中检查特定元素的存在。在本文中,我们将深入探讨Python中的成员运算符,以及如何使用它来进行元素检查。 …

pyside6 捕捉主窗口关闭后,进行释放相关的资源

import sys from PySide6 import QtGui from PySide6.QtWidgets import QWidget,QApplication,QMessageBoxclass Message(QWidget):def __init__(self):# 如果希望窗口内嵌于其他部件,可添加parent参数super(Message, self).__init__()# 调用初始化方法self.initUI(…

使用Sqoop将数据导入Hadoop的详细教程

在大数据处理中,Sqoop是一个强大的工具,它可以将关系型数据库中的数据导入到Hadoop生态系统中,以便进行进一步的分析和处理。本文将提供一个详细的教程,以帮助大家了解如何使用Sqoop将数据导入Hadoop。 准备工作 在开始之前&…

【uniapp】新课uniapp零基础入门到项目打包(微信小程序/H5/vue/安卓apk)全掌握

一、uniapp和HBuilderX介绍 uni-app官方网站:https://uniapp.dcloud.net.cn/ 为什么要学习uniapp? 1、一套代码可以打包到不同的应用平台;一套代码编到十几个平台,这不是梦想。眼见为实,扫描以下二维码,…

uniapp微信小程序投票系统实战 (SpringBoot2+vue3.2+element plus ) -用户投票实现

锋哥原创的uniapp微信小程序投票系统实战: uniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )_哔哩哔哩_bilibiliuniapp微信小程序投票系统实战课程 (SpringBoot2vue3.2element plus ) ( 火爆连载更新中... )共计21条视频…

爬虫利器一览

前言 爬虫(英文:spider),可以理解为简单的机器人,如此一个“不为名利而活,只为数据而生,目标单纯,能量充沛,不怕日晒雨淋,不惧寒冬酷暑”的家伙,…

[嵌入式软件][入门篇] 搭建在线仿真平台(STM32)

文章目录 一、注册平台二、创建首个项目三、硬件介绍 一、注册平台 进入官方,进行注册: 在线仿真地址 二、创建首个项目 ① 新建项目 ② 搭建一个电路 ③ 用STM32F103搭建一个简单电路 ④ 进入编码界面 三、硬件介绍 红框是必看文档&#xff…

【RT-DETR有效改进】带你分析如何确定改进的基础模型,解决模型无法收敛精度很差的问题(ResNet官方一比一复现)

一、本文介绍 Hello,各位读者,距离第一天发RT-DETR的博客已经过去了接近两个月,这段时间里我深入的研究了一下RT-DETR在ultralytics仓库的使用,旨在为大家解决为什么用v8的仓库训练的时候模型不收敛,精度差的离谱的问…

Maven 依赖管理项目构建工具 教程

Maven依赖管理项目构建工具 此文档为 尚硅谷 B站maven视频学习文档,由官方文档搬运而来,仅用来当作学习笔记用途,侵删。 另:原maven教程短而精,值得推荐,下附教程链接。 atguigu 23年Maven教程 目录 文章目…