JWT学习笔记
JWT介绍
JWT标准:RFC 7519: JSON Web Token (JWT) (rfc-editor.org)
jwt.io 官网:https://jwt.io/
百度:JWT(JSON WEB Token)的声明一般被用来在身份提供者和服务提供者间传递被认证的用户身份信息,以便于从资源服务器获取资源,也可以增加一些额外的其它业务逻辑所必须的声明信息,该token也可直接被用于认证,也可被加密。
JWT:Json Web Token,是基于Json的一个公开规范,这个规范允许我们使用JWT在用户和服务器之间传递安全可靠的信息,他的两大使用场景是:认证和数据交换
认证:认证是JWT的最常用场景。只要用户完成登录,其随后的请求都会包含JWT,以允许用户访问经由当前JWT授权的路由、服务或者是资源。由于开销小且能够被简单应用在跨域访问上,JWT在分布式站点上所支持的单点登录(SSO)已经是当前它被广泛应用的一个特性。
信息交换:JWT是一种在各参与方之间安全传递信息的良好方法。由于JWT可以被签名(例:使用公钥/秘钥对),因而可用于确认发送者自称的身份。除此之外,由于signature使用header和payload进行计算,也可以验证内容没有被篡改。
Session方案:
**是什么要用token?**Session 存放在服务器端,Session ID无法实现共享
Token+Redis方案:
解决Session集群无法共享的问题–>将token存到redis中
Token 类似于 Session ID
Token 依赖于 Redis 真实token存放value值
使用Token缺点:每次都需要根据token查询真实内容,对服务器端(比如Redis)压力就比较大。
JWT方案:
JWT和token 最大的区别:
token依赖于Redis,token存放value数据比较安全;而JWT不需要依赖于服务器端,将数据信息内容直接存放在客户端(浏览器)
传统的token
传统的Token,例如:用户登录成功生成对应的令牌,key为令牌 value:userid,隐藏了数据真实性 ,同时将该token存放到redis中,返回对应的真实令牌给客户端存放。
客户端每次访问后端请求的时候,会传递该token在请求中,服务器端接收到该token之后,从redis中查询如果存在的情况下,则说明在有效期内,如果在Redis中不存在的情况下,则说明过期或者token错误。
JWT组成的部分
Header(头) 作用:记录令牌类型、签名算法等 例如:{“alg”:”HS256”,”type”,”JWT}
Payload(有效载荷)作用:携带一些用户信息 例如{“userId”:”1”,”username”:”mayikt”}
Signature(签名)作用:防止Token被篡改、确保安全性 例如 计算出来的签名,一个字符串