当前位置: 首页 > news >正文

为什么要使用Token

传统的session认证

        我们知道,http协议是一种无状态的协议,这就意味着当用户向我们的应用提供了用户名和密码进行用户认证,那么在下一次登录的时候,用户还要再进行验证,因为根据http协议,浏览器并不知道是谁发出的请求,所以为了能够让浏览器识别出是哪个用户发出的请求,我们需要在服务器端存储一份用户登录的信息,这份信息会在响应时传递给浏览器,告诉其被保存为cookie,以便下次请求时发送给我们的应用,这样浏览器就可以知道是哪个用户登录了。

        但这种基于session的认证使应用难以得到扩展,随着不同客户端用户的增加,独立的服务器无法承载越来越多的用户信息,而这时候基于session认证应用的问题就会暴露出来。

基于session认证应用的问题

Session

每个用户经过我们的应用认证之后,应用都要在服务端做一次记录,以方便用户下次请求的鉴别,通常而言 session 都是保存在内存中, 而随着认证用户的增多,服务端的开销会明显增大。

扩展性

用户认证之后,服务端做认证记录,如果认证的记录被保存在内存 中的话,这意味着用户下次请求还必须要请求在这台服务器上,这样才能拿到授权的资源,这样在分布式的应用上,相应的限制了负载均衡器的能力。这也意味着限制了应用的扩展能力。

CSRF (跨站请求伪造)

因为是基于 cookie 来进行用户识别的, cookie 如果被截获,用户就会很容易受到跨站请求伪造的攻击。

基于token的认证

基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端保留用户的认证信息或者会话信息,这就意味着基于token认证机制的应用无需考虑用户在哪一台服务器登录,这就问应用的扩展提供了便利性。

token的工作流程

1. 用户使用账号和密码发出 post 请求
2. 服务器使用私钥创建一个 jwt
3. 服务器返回这个 jwt 给浏览器
4. 浏览器将该 jwt 串在请求头中像服务器发送请求
5. 服务器验证该 jwt
6. 返回响应的资源给浏览器

使用token的目的:是为了减轻服务器的压力,减少频繁的查询数据库,使服务器更加健壮。

token的定义:Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器生成一个Token便将此Token返回给客户端,以后客户端只需带上这个Token前来请求数据即可,无需再次带上用户名和密码。

http://www.lryc.cn/news/161713.html

相关文章:

  • 前端面试的话术集锦第 8 篇:高频考点(JS性能优化 性能优化琐碎事)
  • 【数据分析】Python:处理缺失值的常见方法
  • “批量随机字母命名文件,轻松管理你的文件库“
  • elasticsearch的数据聚合
  • 【网络编程·数据链路层】MAC帧/以太网协议/ARP协议/RARP协议
  • 算法:移除数组中的val的所有元素---双指针[2]
  • Python小知识 - Python爬虫进阶:如何克服反爬虫技术
  • SAP中的新旧事务码
  • day3_C++
  • 力扣题解(73. 矩阵置零),带注释
  • SpringMVC应用
  • 百度输入法全面升级,打造首个基于大模型的输入法原生应用
  • 如何解决GitHub 访问不了?小白教程
  • 龙芯指令集LoongArch——学习笔记(1)
  • ubuntu 20.04 docker安装emqx 最新版本或指定版本
  • 软件测试/测试开发丨学会与 AI 对话,高效提升学习效率
  • CEF内核和高级爬虫知识
  • 视频集中存储/云存储/磁盘阵列EasyCVR平台分组批量绑定/取消设备功能详解
  • 科技成果鉴定测试报告一般包含哪些测试内容?
  • IDEA中的“Deployment“ 将项目直接部署到服务器上
  • 密室逃脱小游戏
  • 【MyBatis】MyBatis项目结构的搭建
  • Vant组件库入门知识
  • Java字符串查找
  • 2023年7月京东投影仪行业品牌销售排行榜(京东大数据)
  • 设计模式-01简单工厂模式详解 详细代码对比
  • IPD-PDT-POP角色的名称、定位和职责说明书
  • 在MySQL中查看数据库和表的数据大小
  • Android前端音视频数据接入GB28181平台意义
  • Ubuntu 20.04上docker安装Redis