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

1.什么是jwt?jwt的作用是什么?2.jwt的三个部分是什么?三者之间的关系如何?3.JWT运行的流程是什么

1. **什么是JWT?JWT的作用是什么?**

   JWT(JSON Web Token)是一种用于在不同系统或组件之间传输信息的紧凑且安全的标准。它的作用主要有两个方面:
   
   - **身份验证(Authentication)**:

JWT通常用于验证用户的身份。当用户登录时,服务器会生成一个JWT,并将其发送给客户端。客户端随后在每个请求中包含JWT,服务器使用它来验证用户的身份,以便允许或拒绝对受保护资源的访问。
   
   - **授权(Authorization)**:

JWT还可以包含有关用户的授权信息,例如用户在系统中的角色或权限。这使得服务器可以根据JWT中的信息来控制用户对资源的访问权限。

2. **JWT的三个部分是什么?三者之间的关系如何?**

   JWT由三个部分组成,这三个部分由点号`.`分隔开来,它们是:
   
   - **标头(Header)**:

标头部分通常包含有关JWT的元数据,如令牌的类型(通常为"JWT")和使用的签名算法(例如HMAC SHA256或RSA)。标头是一个JSON对象,经过Base64编码后放在JWT的第一个部分。
   
   - **载荷(Payload)**:

载荷部分包含一组声明(claims),声明是关于实体(通常是用户)和其他数据的陈述。有三种类型的声明:
   
     - **注册声明(Registered Claims)**:这些是一些预定义的声明,如令牌的主题("sub")发行者("iss")、受众("aud")和过期时间("exp")等。
     
     - **公共声明(Public Claims)**:这些是用户自定义的声明,用于在特定应用程序中传递有关实体的信息。
     
     - **私有声明(Private Claims)**:这些是用户自定义的声明,通常用于在双方之间共享信息。
   
   - **签名(Signature)**:

签名部分用于确保JWT的完整性和验证其来源。它由标头、载荷和一个密钥组合生成,具体取决于所选的签名算法。签名可确保JWT在传输过程中没有被篡改。
   
   三者之间的关系是:标头和载荷是明文的JSON数据,它们通过Base64编码后连接在一起,用`.`分隔,形成JWT的第一部分。然后,签名被附加在JWT的第二部分,形成最终的JWT。因此,JWT的结构是“Header.Payload.Signature”。

3. **JWT(token字符串)的运行流程是什么?**

   JWT的运行流程通常涉及以下步骤:

   - **身份验证**:
     
     1. 用户通过提供用户名和密码等凭据进行身份验证。
     2. 服务器验证凭据的有效性。
     3. 如果验证成功,服务器生成一个JWT,其中包含有关用户的信息和必要的授权信息。
     4. 服务器将JWT发送给客户端。
   
   - **请求授权资源**:
   
     1. 客户端在请求中包含JWT,通常在请求的头部(Authorization header)中。
     2. 服务器接收请求并解析JWT。
     3. 服务器验证JWT的签名以确保其完整性和来源。
     4. 如果JWT有效,服务器检查其中的声明以确定用户是否被授权访问请求的资源。
     5. 如果用户被授权,服务器提供请求的资源。

4.详解链接

JWT在Java中的使用详解_java jwt payload_newCodeWorker的博客-CSDN博客

        总之,JWT在身份验证和授权过程中充当了令牌,用于传递用户身份和授权信息,使得服务器可以在无需维护会话状态的情况下验证用户并授予访问权限。这使得JWT在分布式系统和API身份验证中特别有用。

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

相关文章:

  • 十三、MySql的视图
  • MFC扩展库BCGControlBar Pro v33.6亮点 - 流程图、Ribbon Bar功能升级
  • 前端 JS 经典:文件流下载
  • SSL免费证书会报安全提示吗?
  • 为什么要选择Spring cloud Sentinel
  • 第八天:gec6818arm开发板和Ubuntu中安装并且编译移植mysql驱动连接QT执行程序
  • 使用JavaScript实现图片的自动轮播
  • React 如何拿时间戳计算得到开始和结束时间戳
  • leetcode114 二叉树展开为链表
  • Linux系统上使用SQLite
  • 实现一个超级简单的string类(基于c++)
  • uniapp存值和取值,获取登录凭证 code方法
  • 【SpringCloud微服务全家桶学习笔记-服务调用Ribbon/openFeign】
  • Qt使用I.MX6U开发板上的按键(原理:将电脑键盘方向键↓在Qt中的枚举值与开发板中按键定义的枚举值一致,这样电脑端测试效果就与开发板的一致)
  • C++ RAII在HotSpot VM中的重要应用
  • python随手小练
  • MySQL——函数和流程控制
  • 【Vue3 源码讲解】nextTick
  • 什么是ATR,在聚宽量化平台如何计算ATR
  • Python 爬虫实战之爬淘宝商品并做数据分析
  • Python爬虫-requests.exceptions.SSLError: HTTPSConnectionPool疑难杂症解决(1)
  • 12:STM32---RTC实时时钟
  • 【动态规划刷题 16】最长等差数列 (有难度) 等差数列划分 II - 子序列
  • 【postgresql】替换 mysql 中的ifnull()
  • 单例模式(懒汉式,饿汉式,变体)
  • Java Lambda表达式:简洁且强大的函数式编程工具
  • 开源框架中的责任链模式实践
  • 智能配电系统:保障电力运行安全、可控与高效
  • MySQL学习系列(11)-每天学习10个知识
  • 如何通过Gunicorn和Niginx部署Django