JWT
-
全称是Json Web Token。
- 基于RFC 7519开放标准的,它定义了一种紧凑且独立的方式,用于在各方之间以 JSON 对象的形式安全地传输信息。
- 经过数字签名的原因,这个信息可以用作验证和相互信任
- JWT 可以使用密钥(使用 HMAC 算法)或使用 RSA 或 ECDSA 的公钥/私钥对进行签名。
-
组成
Header、Payload、Signature,中间通过.来分割
场景
- 授权
- 最常用场景
- 用户登录后,每个后续请求都将包含 JWT,允许用户访问使用该令牌允许的路由、服务和资源。
- 单点登录是当今广泛使用 JWT 的一项功能,因为它的开销很小,并且能够跨不同域轻松使用。
- 信息交换
- 相对cookie来说,较为安全而便捷的传输方式
- JWT可以签名,使用公钥/私钥对保证发送者在授权范围内
- 由于签名是使用标头和有效负载计算的,因此还可以验证内容是否未被篡改。
Header
- 标识作用
typ:type 的简写,令牌类型,即JWT。alg:Algorithm 的简写,加密签名算法。一般使用HS256,jwt官网提供了12种的加密算法- 常用声明:
Payload
- 负载信息——需要传输的信息
保留claims:主要包括iss发行者、exp过期时间、sub主题、aud用户等。公共claims:定义新创的信息,比如用户信息和其他重要信息。私有claims:用于发布者和消费者都同意以私有的方式使用的信息。- 常用:
Signatrue
- 签名,对Header和Payload两部分的声明,作用防止JWT被篡改
-
Header中定义的签名算法( base64编码(header) + "." + base64编码(payload), secret ) secret是存放在服务端加密使用到的盐
优缺点
- 优点
- 可扩展性好
- 分部署部署优势,session的多台机器的数据共享,通常存在数据库或redis中
- jwt不需要共享
- 无状态
- 不在服务端存储任何状态,发送请求总会返回带有参数的响应,不会产生附加影响
- jwt载荷可以存储一些常用信息,用于交换信息,有效地使用JWT,可以降低服务器查询数据库地次数
- 可扩展性好
- 缺点
- 安全性
- payload使用base64编码,没有加密,因此在jwt中不能存储敏感信息
- session信息存在服务端,相对安全
- 一次性
- 无状态导致的一次性
- 修改里面的内容需要重新签发一个jwt
- 安全性
总结
- 今日内容不多,但是要上手试试才行