没有合适的资源?快使用搜索试试~ 我知道了~
温馨提示
试读
16页
最通俗的关于Cookie, Session,Token和JWT的相关笔记和理解。在终章笔记中主要介绍一下JWT以及总结Cookie到JWT的区别与发展,包括JWT的定义,特点,重要属性,优缺点,作用和使用场景,Cookie到JWT场景,安全等的区别。 上章:主要介绍背景和Cookie 中章:主要介绍一下Session并总结一下Cookie和Session。 下章:主要介绍Token的相关定义及理解。 终章:主要介绍JWT并总结JWT和Token的区别,以及总结Cookie到JWT的区别。 相关博客链接:https://blog.csdn.net/qq_41895003/article/details/130567062
资源推荐
资源详情
资源评论
【前端知识】Cookie, Session,Token和JWT的发展及区别(四)
xiaobai_Ry
编辑
版权
【前端知识】Cookie, Session,Token和 JWT 的发展及区别(四)
9. JWT
9.1 JWT的背景及定义
(1)JWT的字面理解
(2)JWT与传统Token的区别
9.2 JWT的组成
(1) Header(头部)
(2)Payload(有效荷载)
(3)Signature(签名)
(4)JWT的校验
9.3 JWT的类型
9.4 JWT的优缺点
9.4.1 优点
9.4.2 缺点
9.5 JWT的应用及使用
9.5.1 JWT的两大应用
9.5.2 JWT的使用场景
9.5.3 JWT的使用方式
9.6 JWT的认证流程
9.7 JWT常见的相关问题
(1)Base64 是可逆的, 那JWT 安全吗?
(2)JWT Payload 內容可以被伪造吗?
(3)JWT空间及长度问题?
(4)JWT失效问题?
JWT使用建议
10. 拓展——安全
10.1 加密算法
10.2 两种网络攻击
10.3 CSRF与XSS攻击
11. 总结
11.1 三种机制与网络攻击/安全的关系
11.1.1 Cookie
11.1.2 Session
11.1.3 Token
11.2 从Cookie到JWT的发展总结
11.3 从Cookie到JWT的区别总结
11.4 从Cookie到JWT的应用总结
12. 其他
承接上文的笔记继续分享啦。
第1页 共16页
由于篇幅有点长
,所以笔者将我关于这部分的笔记分为四个篇章(文章开头后面附录上下篇链接),避免读者的阅读疲倦感
,同时
也方便大家的阅读啦
。如果下面笔记中存在错误,欢迎大家及时指正,学习与讨论。
•
上章
:主要介绍一下背景和Cookie。
链接:
【前端知识】Cookie, Session,Token和JWT的发展及区别(一)
•
中章
:主要介绍一下Session并总结一下Cookie和Session。
链接:
【前端知识】Cookie, Session,Token和JWT的发展及区别(二)
•
下章
:主要介绍Token的相关定义及理解
链接:
【前端知识】Cookie, Session,Token和JWT的发展及区别(三)
•
终章
:主要介绍JWT并总结JWT和Token的区别,以及总结Cookie到JWT的区别与发展。
链接:
【前端知识】Cookie, Session,Token和JWT的发展及区别(四)
9. JWT
9.1 JWT的背景及定义
(1)JWT
的字面理解
JWT
是JSON Web Token的缩写,从字面上来看,我们也可以知道JWT的数据格式为 JSON对象 ,而且它也是一种特殊的Token。
简单
来说,
JWT是一种使用JSON格式传递数据的Web Token
技术
。跟Token一样,JWT可用于用户的登录
鉴权
,是一种用于身份验证和授
权的开放标准,定义了一种紧凑简约、自包含的协议格式,用于作为
JSON对象在各方之间安全地传输信息。该信息可以被验证和信任,
因为它是数字签名的。
1.
紧凑简约(Compact):实际上指的是JWT是轻量级的,由于JWT是基于JSON的,尺寸相对较小,而且JWT
可以通过
URL
,POST参数或HTTP标头内发送。
2.
自包含(Self-contained) : 指JWT的第二部分有效载荷(Playload
)包含有关用户的所有必需信息,是一种自己包含用户信息
及加密算法的数据。
(2)JWT与传统Token的区别
那JWT与前面提到的Token有什么区别?
前面提到
Token不是也是说避免多次查库吗?需要注意的是现在很多文章中讲到的Token更多的偏向JWT,而不是传统的Token。
所以看文
章时,需要注意一下这一点。因此,这里讨论的主要是
JWT跟我们传统的Token的区别是什么。其实它们的
区别主要体现在接收的信息是
否需要进入数据库查询信息
。传统的Token需要查库是因为它们通常采用的是基于带状态的用户认证机制,也就是我们前面所说的有状态
的
Token。在这种有状态的机制下,每个Token就必须与后端存储(比如数据库或者服务器缓存)进行交互,以此来验证Token
的合法性和
有效性。而我们现在所讲的
JWT也就是我们前面所说的无状态Token啦。与传统的Token不同,JWT将用户信息加密到Token
里面,服务器
不保存任何用户信息,服务器通过使用保存密钥验证
JWT Token的准确性,只要准确即可通过验证。
因此,
JWT的出现改善了传统Token需要查库验证用户信息,而JWT不用查库或者少查库,直接在服务端进行校验。因为用户的信息及加
密信息包含在
JWT的第二分部Payload(有效荷载)和第三部分的Signature(签名)中,只要在服务端进行校验便可,并且校验也是
JWT
自己实现的。
这里
JWT校验是JWT自己实现是指JWT校验过程中,检查JWT合法性的算法是服务器根据JWT中的规范来完成的。在验证JWT时,需要
对比从请求中获取到的
JWT前面和服务端根据相同的密钥计算出来的签名是否一致,所以我们通常说JWT校验是JWT自己实现,JWT自
己提供签名及签名算法规范。
9.2 JWT的组成
JWT
本质上是由三部分组成的字符串,包括 Header(头部)、Payload(有效荷载)和 Signature(签名)。
第2页 共16页
JWT
三部分之间用“.”号做分割:
其中,
Payload部分是真正的用户信息,是用户信息经过加密之后生成的字符串。而Header和Signature是与安全相关的部分,只是为了
保证
Token的安全性。
注:
Base64 URL是一种编码,不是加密方式,是可以解码的
那什么是
Base64 URL编码和Base64编码?
Base64
编码和 Base64 URL 编码都是将二进制数据转换为可读字符串的编码方式,区别在于 Base64 URL 编码考虑了 URL 场景下的特
殊性。
• Base64 编码
是一种将二进制数据转化为可读字符串的编码方式,它使用
64 个 ASCII
字符来表示二进制数据中的每一个字节,并且可以减少数据
在网络上的传输量。
Base64 编码使用 “+”、“/” 和 “=” 三个字符,因此在URL 或 HTTP 报头等场景下可能会出现问题。
• Base64 URL 编码
是正常
Base64 编码的变种,为了适应 URL 和 HTTP 报头等场景,其使用 “-” 和 “_” 替代 “+” 和 “/”,并且去掉了等于号“=”,不足4
个
字符时,补上需要加密的字符数模
4的余数个"="号。这使得 Base64 URL 编码更加适合于在 URL 中传输二进制数据,而不会对 URL
的解析造成问题。
(1) Header(头部)
•
头部(
Header):JWT头部是一个描述JWT元数据的JSON对象, 一般在头部会说明签名的方法
和
令牌的类型
。
•
作用
:记录令牌类型、签名算法等 例如:{“alg":“HS256”,“type”,"JWT}
jwt token
= base64 URL(头部)
+
"." +base64 URL(负载) + "." + base64
URL
(签名)
// JWT
头部分是一个描述
JWT
元数据的
JSON
对象,通常如下所示。
{
第3页 共16页
(2)Payload(有效荷载)
•
有效载荷(
Payload): 七默认字段+自定义私有字段
•
作用
:携带一些用户信息,例如{“userId”:“1”,“username”:“mayikt”},存放信息(可以被解密,不安全),需要注意的是,Payload
的内容
只经过了
Base64 编码,对客户端来说当于明文存储,所以不要放置敏感信息。
•
七默认字段
:
◦ iss: jwt签发者
◦
sub: jwt
所面向的用户
◦
aud:
接收jwt
的一方
◦
exp: jwt
的过期时间,这个过期时间必须要大于签发时间
◦ nbf: 定义在什么时间之前,该jwt都是不可用的.
◦ iat: jwt的签发时间
◦ jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
(3)Signature(签名)
•
Signature
签名 = HMACSHA256( base64UrlEncode(header) + “.” + base64UrlEncode(payload) , secret)
•
作用
:防止Token被篡改、确保安全性。例如:计算出来的签名,一个字符串。Header和Playload加上密钥加密而成,用于比对信
息,防止篡改
Header和Playload。Signature需要使用编码后的header和payload,以及我们提供的一个密钥,然后使用header中的签
名算法进行签名,签名的作用是保证
JWT没有被篡改过
•
Signature
中常用的签名算法: 常见的算法加密方式有SHA,HMAC,RSA和ECDSA等。其中:
◦
SHA
:是一种
散列算法(哈希函数)
,可以细分为:SHA-224、SHA-256、SHA-384、SHA-512、SHA-512/224、SHA-512
/256
。
◦ HMAC
:是
对称加密【哈希消息验证码】,加密和解密用的是相同的密钥,主要用于消息防篡改,例如:HMAC SHA256、
HMAC SHA384 和 HMAC SHA512。
◦
RSA
:是基于公私钥非对称加密的算法,在 JWT 中主要用作数字签名,算法运行较慢。RSA没有加入随机数,因此如果攻击者
遍历猜测所有的原文,可以通过对比相同的加密密文选择出真实原文,为了防止这种情况,
RSA加入了padding
机制,对数据进
行填充。
◦ ECDSA:是
基于椭圆曲线密码学的非对称加密算法
,在 JWT 中同样用作数字签名,有ECDSA with P-256、
ECDSA with P-384
和
ECDSA with P-521等。
(4)JWT的校验
"alg": "HS256",
"type": "JWT"
}
// 1
)
alg
属性表示签名使用的算法,默认为
HMAC SHA256
(写为
HS256
);
// 2
)
type
属性表示令牌的类型,
JWT
令牌统一写为
JWT
。
// 3
)最后,使用
Base64 URL
算法将上述
JSON
对象转换为字符串保存。
第4页 共16页
剩余15页未读,继续阅读
资源评论
xiaobai_Ry
- 粉丝: 1w+
- 资源: 28
上传资源 快速赚钱
- 我的内容管理 展开
- 我的资源 快来上传第一个资源
- 我的收益 登录查看自己的收益
- 我的积分 登录查看自己的积分
- 我的C币 登录后查看C币余额
- 我的收藏
- 我的下载
- 下载帮助
安全验证
文档复制为VIP权益,开通VIP直接复制
信息提交成功