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

JWT令牌的介绍

目录

一、什么是JWT

二、JWT令牌和Cookie客户端、Session服务端对比

三、特点与注意事项

四、使用场景

优点: 

五、结构组成


一、什么是JWT

JWT(JSON Web Token)是一种用于在网络应用间传递信息的开放标准(RFC 7519)。它以 JSON 格式存储被加密后的信息,通常用于验证和身份认证。这是token验证的一种令牌。叫身份验证令牌。在前后端分离的架构中常用。

白话文理解: 

        在以前用cookie认证时候,会把状态信息什么的储存在服务器里面,随着用户越来越多,会造成服务器的压力。那么jwt就出来了,你什么时候来,我什么时候给你颁发一个认证授权访问的令牌就好,不会储存在服务器里面。啪,给你盖章通过认证了,你可以带着这个令牌请求去访问我们服务器的资源了。

官网的网址:

二、JWT令牌和Cookie客户端、Session服务端对比

简单介绍cookie和Session:

服务器会为每个用户创建一个唯一的会话标识,这个标识会存储在客户端的 Cookie 中。实际的会话数据则存储在服务器上,可以存储用户的登录状态、购物车内容等信息。Session 通常使用内存或数据库来存储会话数据。 

jwt和cookie都是用于验证用户身份和维护会话状态的机制。

1.储存位置

        cookie是储存在客户端浏览器中的小型文本文件,由服务器在响应中设置,会把会话的各种信息都存在服务器中,会造成服务器的压力。大型的项目要分布式处理负载均衡就会不方便,因为把认证信息储存在了单一的服务器上面。

        jwt令牌是无状态的,随时访问随时给令牌认证,一次性的,所以单点登录很适合。不会给服务器造成压力。

2.安全性:

         Cookie 存储在客户端,容易受到跨站脚本攻击(XSS)和跨站请求伪造攻击(CSRF)等安全威胁。

         令牌可以使用 HTTPS 加密传输,可以防止在传输过程中的窃听和篡改,提高了安全性。

3. 跨域:

         默认情况下,Cookie 在同一域名下共享,但有限制。

        令牌可以在不同域名下共享,通过跨域资源共享(CORS)等机制,提供了更大的灵活性。

4.负担

cookie全部域名都发送到服务端会造成服务端的压力,jwt令牌可以根据需要发送。 

总的来说,虽然 Cookie 和令牌都可以用于身份验证和会话管理,但由于令牌的安全性和灵活性更高,以及更适合现代 Web 应用的需求,令牌机制(如 JWT)在很多情况下被更广泛地采用。

三、特点与注意事项

JWT 具有轻量、可传递、自包含、易于验证等特点,使其成为在不同系统间安全传递信息的一种有效方式。然而,使用 JWT 时仍需注意安全性问题,特别是保护秘密密钥、适当的有效期设置等。 这是可被破译的,里面放一些公开可以看的信息就好。不要放敏感信息,比如密码等。

四、使用场景

它主要用于在不同实体之间安全地传输信息,通常用作身份验证和授权的方式。 JWT 在许多应用中广泛使用,特别是在无状态的分布式系统中,如单页应用、移动应用和微服务。它可以在令牌中包含有关用户的信息,并通过数字签名或加密来验证和保护令牌的完整性。JWT 适用于需要跨多个服务进行验证和授权的场景。

  • 身份验证(Authentication): 用户登录后,服务器生成一个包含用户信息的 JWT,然后将 JWT 发送给客户端。客户端之后在每个请求中携带该 JWT,服务器可以校验 JWT 的有效性来认证用户。

  • 授权(Authorization): JWT 可以包含用户的权限信息,服务器可以根据 JWT 中的权限信息控制用户对资源的访问。

  • 信息交换(Information Exchange): 在不同的应用之间传递信息,由于 JWT 包含了一定的信息,可以用于安全地传递数据。

  • 单点登录(Single Sign-On,SSO): 在多个应用间共享用户登录状态,用户只需要登录一次即可访问多个应用。

优点: 

因为是json传输的,可以跨语言使用;还能在中间的载荷位置放一些不敏感的信息;字节占用小,传输方便;不会保存在服务器里面,容易扩展分布式。

五、结构组成

结构示例
a.b.c

 一个 JWT 由三部分组成:头部(Header)、载荷(Payload)和签名(Signature)。每个部分都是使用 Base64 编码的 JSON 对象,它们一起形成了完整的 JWT。

  1. 头部(Header): 头部通常由两部分组成:令牌的类型(JWT)和所使用的加密算法(如 HMAC SHA256 或 RSA)。

  2. 载荷(Payload): 载荷包含了需要传递的信息,可以是用户的一些身份信息、权限、角色等。载荷是经过 Base64 编码的 JSON 数据。

  3. 签名(Signature): 签名部分使用了头部和载荷以及一个秘密密钥,通过指定的加密算法进行加密。签名的目的是为了确保 JWT 没有被篡改,同时也可以验证发送者的身份。

简单来说头部里面记录的是使用的是什么加密算法、和令牌的类型,即jwt。

载荷里面记录的是含有三大声明,注册声明:iss(发行者)、exp(到期时间)、sub(主题)、sub(受众)。公开声明私有声明,这三个声明都是非必要的,如果不声明,载荷里面也会自动生成数据代替载荷。

签名就是在头部和载荷已经使用了加密算法后,再对他们进行加密签名,保证他们的数据不会被篡改。

有什么问题都可以评论区留言,看见都会回复的

如果你觉得本篇文章对你有所帮助的,多多支持吧!!!

点赞收藏评论,当然也可以点击文章底部的红包或者👇订阅付费文章创作支持一下了。抱拳了!

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

相关文章:

  • C语言入门 Day_9 条件判断
  • Nodejs-nrm:快速切换npm源 / npm官方源和其他自定义源之间切换
  • 数据驱动洞察:各种词频分析技术挖掘热点数据
  • ES6-简介、语法
  • 诚迈科技子公司智达诚远与Unity中国达成合作,打造智能座舱新时代
  • 算法与数据结构(十)--图的入门
  • 【Go 基础篇】Go语言 init函数详解:包的初始化与应用
  • wazuh环境配置及漏洞复现
  • Java接收前端请求体方式
  • 私有化部署即时通讯平台,30分钟替换钉钉和企业微信
  • 如何深入理解 Node.js 中的流(Streams)
  • MSP430FR2xxx开发(一)添加driverlib
  • 【C++】做一个飞机空战小游戏(九)——发射子弹的编程技巧
  • 34.SpringMVC获取请求参数
  • TC1016-同星4路CAN(FD),2路LIN转USB接口卡
  • Android源码——从Looper看ThreadLocal
  • 16、Flink 的table api与sql之连接外部系统: 读写外部系统的连接器和格式以及JDBC示例(4)
  • MySQL 自定义 split 存储过程
  • 专题-【十字链表】
  • 微信小程序教学系列(2)
  • 社科院与美国杜兰大学金融管理硕士项目——畅游于金融世界
  • 功能强大、超低功耗的STM32WL55JCI7、STM32WL55CCU7、STM32WL55CCU6 32位无线远距离MCU
  • 【自适应稀疏度量方法和RQAM】疏度测量、RQAM特征、AWSPT和基于AWSPT的稀疏度测量研究(Matlab代码实现)
  • sql递归查询
  • 常见前端面试之VUE面试题汇总三
  • Three.js 实现模型材质分解,拆分,拆解效果
  • 《JVM修仙之路》初入JVM世界
  • 苍穹外卖 day1 搭建成功环境
  • 智能主体按照功能划分
  • python中的matplotlib画折线图(数据分析与可视化)