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

2023-09-21 09:08:55

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官网地址 

JSON Web Token Introduction - jwt.io

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

更多推荐

【Rust日报】2023-09-18 如何教会 AI 射击

如何教会AI射击作者尝试构建一个可以学习射击目标的神经网络,这段视频展示了大约这3周的进展。神经网络是用Rust编程语言从头构建的(主要基于作者之前的一个自动驾驶项目)。使用Bevy游戏引擎进行可视化。目前,模拟中还缺乏的是一些图表和其他衡量进度的指标,在下一个版本中,作者计划添加这些功能以及其他必要的UI更新。一旦完

jupyter notebook插件安装及插件推荐

安装插件安装插件选择的工具栏pipinstalljupyter_contrib_nbextensions将插件工具栏添加到jupyternotebook页面jupytercontribnbextensioninstalldisableconfigurationfornbextensionswithoutexplicit

[python 刷题] 128 Longest Consecutive Sequence

[python刷题]128LongestConsecutiveSequence题目:Givenanunsortedarrayofintegersnums,returnthelengthofthelongestconsecutiveelementssequence.Youmustwriteanalgorithmthatr

MOS管的二级效应及其对伏安特性的影响

前言相信MOS管的理想伏安特性相信各位都在模拟电路中学过,但实际上,该理想图仅是实际图的一个近似,忽略几乎所以的二级效应。因此,为了深入理解非理想的MOS的伏安特性,了解最重要的几个二级效应是很有必要的。本文主要涉及各个参数之间的影响关系,并不涉及具体公式计算,仅做了解。速度饱和与迁移率降低效应载流子的漂移速率以及因此

Blazor前后端框架Known-V1.2.15

V1.2.15Known是基于C#和Blazor开发的前后端分离快速开发框架,开箱即用,跨平台,一处代码,多处运行。Gitee:https://gitee.com/known/KnownGithub:https://github.com/known/Known概述基于C#和Blazor实现的快速开发框架,前后端分离,开

SpringMVC异常处理

1概述SpringMVC框架处理异常的常用方式:使用@ExceptionHandler注解处理异常。2@ExceptionHandler注解和用@ControllerAdvice注解2.1@ExceptionHandler注解使用注解@ExceptionHandler可以将一个方法指定为异常处理方法。该注解只有一个可选

C#__使用流读取和写入数据的简单用法

使用流处理数据的优势:可以一次性搬运数据量大的文件,把数据当做水,一点一点搬运。数据的传输方向:从外部源传输到程序(读取流);从程序传输到外部源(读入流)外部源:文件、网络数据、内存区域、命名管道读写内存:System.IO.MemorySystem处理网络数据:System.Net.Sockets.NetworkSt

让Pegasus天马座开发板用上OLED屏

继上篇《让Pegasus天马座开发板吃上STM8S标准库》移植完标准库之后,于是我又想为天马座开发板添加一块屏幕。终于在我的零件箱底下找到了沉入箱底多年的0.96OLED屏幕。屏幕介绍这个是128x64像素的屏幕模块,其使用的SSD1306的驱动IC。而目前该模组,只支持3/4线SPI及I2C通信方式。硬件连接我将天马

centos7如何释放磁盘空间?

centos7磁盘满了,但是找不到大的文件,原因是没有释放磁盘空间小白教程,一看就会,一做就成。1.原因当centos系统下启动多个服务且没有一定的清理机制时(比如日志),系统磁盘空间很容易就被占满,但是有时候删除了文件却发现系统磁盘空间未释放,可能原因是忽略了有应用一直在往其中写数据,直接删除某文件无法释放磁盘空间2

Spring SpEL 表达式语言

一、文本表达式文本表达式支持字符串、数字(正数、实数及十六进制数)、布尔类型及null。其中的字符表达式可使用单引号来表示,形如:'Deniro'。如果表达式中包含单引号或者双引号字符,那么可以使用转义字符\。数字支持负数、小数、科学记数法、八进制数和十六进制数。默认情况下,实数使用Double.parseDouble

IO口电路种类

文章目录参考1.高速振荡电路(时钟IO引脚)2.与GPIO功能共享的低速振荡电路(子时钟IO)3.CMOS滞后输入引脚4.电源输入保护电路5.A/D转换器ref+(AVRH)带保护电路的电源输入端6.CMOS电平输出7.CMOS电平输出,带有模拟输入8.CMOS电平输出,带有模拟输入(上面是滞后,这个是自动)9.没有模

热文推荐