• 为什么要使用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前来请求数据即可,无需再次带上用户名和密码。

  • 相关阅读:
    flink学习之旅(二)
    Go 语言切片扩容规则是扩容2倍?1.25倍?到底几倍
    解决访问出现404和500的问题(Tomcat与Servlet、JSP、JDK的版本适配问题)
    js基础笔记学习280蛇流畅运动
    微擎模块 超人跑腿 1.7.1 后台模块+前端小程序,后台新增代办,代驾,家政模板自定义
    互联网Java工程师面试题·Spring篇·第五弹
    Go语言Web开发入门指南
    华为云云耀云服务器L实例评测|Python Selenium加Chrome Driver构建UI自动化测试实践
    2023年8月京东冰箱行业品牌销售排行榜(京东数据挖掘)
    vue父子组件实现表单双向绑定
  • 原文地址:https://blog.csdn.net/m0_64253261/article/details/132773690