文章首先发表在个人博客中:JWT的Javalover.cc(Javalover.cc)
JWT的全名本质上是一个令牌,例如以下示例:
您会看到令牌中有两个符号。为了可视化效果,显示了分支。实际使用是一个显示;
JWT由三个部分组成:标题(头),有效载荷(负载),签名(签名)
我们在前言中看到的缝线字符串实际上是编码的JWT :(将在下面介绍特定的编码过程)
那么编码之前的JWT是什么样的?
让我们在编码之前介绍JWT的组件;
标题头:
头部信息是内部的一个,主要由令牌的类型和签名算法组成;
例如,以下标头示例:
在
有效负载负载:
负载,内部也是JSON对象,主要包括用户自定义和官方预定义相关字段的相关字段;
例如,有效负载示例以下:
在:
有一个细节:
JWT中的所有正式定义的字段均为三位数,例如在标题中,有效载荷;
目的是确保JWT的紧凑性保存传输带宽
Siganatucatual Signature:
签名是要加密签名,并将配对和有效载荷在上述标题上方加密;
将使用钥匙,钥匙从后端保持,前端不明智。
假设上面提到了签名算法,则签名代码如下:
可以看出,在此处的签名之前,标题和有效负载内容将由Base64UrlenCode编码;
BASE64URL编码:类似于Base64编码,但根据Base64,将其转换为空字符,将其转换为
转换过程如下:
要转换URL转换的原因是因为这些特殊字符在URL中具有特殊的含义。例如,参数的键值;
以及令牌有时直接在URL中使用它(尽管不建议这样做,因为它不安全)
以下是验证令牌的示例:使用JS中的库;
授权访问是通过JWT执行的,因此不必担心CSRF攻击(跨站点请求伪造的交叉站点伪造请求),因为我们不存在Cookie中;
有关通过cookie攻击CSRF攻击的信息,您可以参考:前端安全系列(2):如何防止CSRF攻击?-Meituan技术团队(Meituan.com)
优势:
缺点:
本文介绍了JWT的基本信息,包括结构组成,使用方法以及优势和缺点;