大家好,我是IT修真院上海分院第6期学员,一枚正直善良的JAVA程序员。
今天给大家分享一下,修真院官网JAVA任务5中,JWT简单介绍。
JWT(Json Web Token)定义了一种使用Json形式在网络间安全地传递信息的简洁开放的标准(RFC 7519)。
为什么要使用JWT?
传统的session认证方案:
第一次用户认证请求通过时,服务器端存储用户的登录信息,然后在响应时传递给浏览器,浏览器保存为cookie,下次请求时把cookie发送给服务器,服务器根据cookie信息来识别是哪个用户。
传统的session认证弊端:
如果用户增多,Session认证就会暴露问题。因为每个用户在认证后,服务器都会记录Session,一般保存在内存中,随着认证用户增多,服务器开销也会增大。
将用户信息保存在服务器上,认证用户的后续请求都需要到这台保存了自己Session的服务器上验证Cookie。对负载均衡,应用扩展产生限制。
基于Token验证机制:
基于token的鉴权机制类似于http协议也是无状态的,它不需要在服务端去保留用户的认证信息或者会话信息。这就意味着基于token认证机制的应用不需要去考虑用户在哪一台服务器登录了,这就为应用的扩展提供了便利。
Token验证流程:
1、用户Login
2、服务端验证
3、将用户信息保存在Token中,发送给用户
4、客户端存储Token,并在以后的请求中带上这个Token
5、服务端解析、验证token值
6、服务端将请求数据返回客户端
JWT长什么样?
JWT由头部(Header)、载荷(Payload)、签名(签名)三部分组成。
jwt的头部(Header)承载两部分信息:{ "typ": "JWT", "alg": "HS256" }
typ:声明类型,这里是jwt。alg:声明加密算法,这里是SHA256。
载荷(Payload)就是存放有效信息的地方。这些有效信息包含三个部分:标准中注册的声明、公共的声明和私有的声明。
标准中注册的声明 (建议但不强制使用) :
iss: jwt签发者。
sub: jwt所面向的用户。
aud: 接收jwt的一方。
exp: jwt的过期时间,这个过期时间必须要大于签发时间。
nbf: 定义在什么时间之前,该jwt都是不可用的。
iat: jwt的签发时间。
jti: jwt的唯一身份标识,主要用来作为一次性token,从而回避重放攻击。
公共的声明 :
公共的声明可以添加任何的信息,一般添加用户的相关信息或其他业务需要的必要信息.但不建议添加敏感信息,因为该部分在客户端可解密。
私有的声明 :
私有声明是提供者和消费者所共同定义的声明,一般不建议存放敏感信息,因为base64是对称解密的,意味着该部分信息可以归类为明文信息。
签名(Signature):
将上面的两个编码后的字符串用句号.连接在一起(头部在前)拼接成新的字符串,然后通过header中声明的加密方式进行加盐secret组合加密,就生成了JWT签名。
注意:secret是保存在服务器端的,jwt的签发生成也是在服务器端的,secret就是用来进行jwt的签发和jwt的验证,所以,它就是你服务端的私钥,在任何场景都不应该流露出去。一旦客户端得知这个secret, 那就意味着客户端是可以自我签发jwt了。
和Session方式存储id的差异:
Session方式存储用户id的最大弊病在于要占用大量服务器内存,对于较大型应用而言可能还要保存许多的状态。一般而言,大型应用还需要借助一些KV数据库和一系列缓存机制来实现Session的存储。
而JWT方式将用户状态分散到了客户端中,可以明显减轻服务端的内存压力。除了用户id之外,还可以存储其他的和用户相关的信息,例如该用户是否是管理员、用户所在的分桶。
虽说JWT方式让服务器有一些计算压力(例如加密、编码和解码),但是这些压力相比磁盘I/O而言或许是半斤八两。
单点登录
Session方式来存储用户id,一开始用户的Session只会存储在一台服务器上。对于有多个子域名的站点,每个子域名至少会对应一台不同的服务器。
所以如果要实现在某个子域登录后,在其他的子域名下依然可以取到Session,这要求我们在多台服务器上同步Session。
使用JWT的方式则没有这个问题的存在,因为用户的状态已经被传送到了客户端。因此,我们只需要将含有JWT的Cookie的domain设置为顶级域名即可。
JWT应该保存什么信息?
1、用于辨别用户的信息,如id,username
2、过期时间
3、用户的其余辨识信息:客户端的UA、IP等
https://www.jianshu.com/p/576dbf44b2ae
http://blog.leapoahead.com/2015/09/07/user-authentication-with-jwt/
PTT连接:PTT
视频连接:视频
今天的分享就到这里啦,欢迎大家点赞、转发、留言、拍砖~
技能树.IT修真院
“我们相信人人都可以成为一个工程师,现在开始,找个师兄,带你入门,掌控自己学习的节奏,学习的路上不再迷茫”。
这里是技能树.IT修真院,成千上万的师兄在这里找到了自己的学习路线,学习透明化,成长可见化,师兄1对1免费指导。
快来与我一起学习吧~http://www.jnshu.com/login/1/22137050