JSON Web Token(JWT) 简介

news/2024/10/7 4:29:24

JSON Web Token(JWT) 简介

1 什么是 JWT?

JWT(JSON Web Token)是认证解决方案,下面介绍它的原理和用法.

2 JWT 的结构

JWT 的结构如下

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

JWT的具体表现是一个长字符串,中间用点(.)分隔成三个部分

这三部分分别指的是

Header(头部)
Payload(负载)
Signature(签名)

即:

Header.Payload.Signature

2.1 Header

{"alg": "HS256","typ": "JWT"
}

alg属性表示签名的算法,默认是 HMAC SHA256(写成 HS256);typ属性表示这个令牌(token)的类型(type),一般是这两个属性,当然也可以加上其他自定义的属性。

将上面的 JSON 对象使用 Base64URL 算法编码就构成了 JWT 的 Header。

2.2 Payload

Payload 用来存放实际需要传递的数据。JWT 规定了下面7个可选字段(建议但不强制使用)。

iss (issuer):签发人
exp (expiration time):过期时间
sub (subject):主题
aud (audience):受众
nbf (Not Before):生效时间
iat (Issued At):签发时间
jti (JWT ID):编号

除了官方可选字段,你可以在这个部分定义私有字段,如下:

{"sub": "1234567890","name": "John Doe","iat": 1516239022
}

同样上面的 JSON 对象使用 Base64URL 算法编码就构成了 JWT 的 Payload。

2.3 Signature

Signature 部分是对前两部分的签名,防止数据篡改。

首先,需要指定一个密钥(secret)然后,使用 Header 里面指定的签名算法(默认是 HMAC SHA256),按照下面的公式产生签名。

HMACSHA256(base64UrlEncode(header) + "." +base64UrlEncode(payload),secret)

secret 要保存在服务端,JWT的签发和验证都需要用这个 secret,不能泄露

同样使用 Base64URL 算法编码就构成了 signature

最后,把 Header、Payload、Signature 三个部分拼成一个字符串,每个部分之间用"点"(.)分隔,就组成了完整的 JWT

3 使用方式

服务端返回 JWT 给客户端,此后,客户端每次与服务器通信,都要带上这个 JWT。可以放在 HTTP 请求的头信息Authorization字段里面。

Authorization: Bearer <token>

或放在 POST 请求的数据体里面

参考链接

  • https://jwt.io/introduction/
  • https://mgleon08.github.io/blog/2018/07/16/jwt/
  • https://www.ruanyifeng.com/blog/2018/07/json_web_token-tutorial.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/28348.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

docker容器安装MySQL

安装5.7的版本 可以改一下docker的源 docker pull mysql:5.7docker pull mysql:5.7docker imagesdocker ps -a docker run \ --name mysql \ -d \ -p 3306:3306 \ --restart unless-stopped \ -v /mydata/mysql/log:/var/log/mysql \ -v /mydata/mysql/data:/var/lib/mysql \ -…

沟通技巧

第一步:搞定情绪 充分表达尊重,(不吝赞美,如何夸奖别人?从细节和对比可以发现) 夸人的时候不要太笼统,如:你穿的真好看和今天 上衣显的你很白,太美了。。 显然后面这一句显得更加的真诚 找不到细节就用对比,你穿的真好看,比一般人有气质多了。 对比找不到,就直接夸…

从字符串A中删除字符串B中存在的字母(不区分大小写)C语言实现

实现对字符串A进行处理,参照字符串B,只有字符串B中的字母在字符串A存在,则不分大小写,从字符串A中删除。C语言实现。V1.0 2024年5月7日 发布于博客园题目:​ 设计一程序实现功能,处理字符串A,处理规则是:只要B字符串里面有的字母,不区分大小写,一律从A字符串中删掉。…

[SNOI2019] 数论

这一道题目最好记住,就是两个模数之间在互相作用 首先转化一下,我们枚举其中一个集合然后快速查询另一个集合 也就变成了\((a_i+kP)mod\: Q∈B\) 然后看这篇文章的建模 解释一下 它是将\([0,Q)\)中的每一个数弄成一个环,就像下面这样然后加一个\(P\)就相当于瞬时间走\(P\)步…

andriod sdk 安装

1、下载andriod sdk tools https://www.androiddevtools.cn/ 2、解压zip包 dos窗口进入 解压路劲 执行 tools\android.bat update sdk --no-ui(解压目录中SDK Readme.txt)

R语言分析糖尿病数据:多元线性模型、MANOVA、决策树、典型判别分析、HE图、Boxs M检验可视化

全文链接:https://tecdat.cn/?p=33609 原文出处:拓端数据部落公众号 背景 Reaven和Miller(1979)研究了145名非肥胖成年人的葡萄糖耐量和胰岛素血液化学指标之间的关系。他们使用斯坦福线性加速器中心的PRIM9系统将数据可视化为3D,并发现了一个奇特的图案,看起来像是一个…

R语言经济学:动态模型平均(DMA)、动态模型选择(DMS)预测原油价格时间序列

原文链接:http://tecdat.cn/?p=22458 原文出处:拓端数据部落公众号简介 本文提供了一个经济案例。着重于原油市场的例子。简要地提供了在经济学中使用模型平均和贝叶斯方法的论据,使用了动态模型平均法(DMA),并与ARIMA、TVP等方法进行比较。希望对经济和金融领域的从业…

数据分享|广义线性模型beta二项分布的淋巴结疾病风险预测可视化R语言实现

全文链接:https://tecdat.cn/?p=36112 原文出处:拓端数据部落公众号 淋巴结疾病作为一类复杂的健康问题,其风险预测一直是临床和公共卫生领域的研究热点。随着统计学的进步和计算能力的提升,广义线性模型(GLM)成为了分析这类数据的有力工具。特别是当数据呈现比例特性时…