成都java开发培训
达内成都高升桥中心

18011516507

热门课程

成都Java开发工程师:什么是JWT令牌认证?

  • 时间:2020-02-14 10:04
  • 发布:成都达内
  • 来源:成都达内

当下,JWT(JSON Web Token)令牌认证已经变得越来越流行。本文主要介绍JWT令牌认证与传统的Session会话认证机制的区别。

为什么需要认证?

HTTP是一种无状态协议,那就意味着当前的客户端的请求与任何之前的请求是独立不依赖的,而服务器也并不会记录任何请求信息。例如,如果你只是简单地访问静态页面(例如访问 www.yiidian.com ),服务器实际上不需要知道客户端是谁,而只会给客户端返回纯粹的页面内容。另一方面,如果你想在Facebook上进行资料上的更改,则必须向一点教程网服务器证明你是该帐户的拥有者。简而言之,您需要先验证自己的身份,然后服务器才能为你提供访问敏感信息的权限。在了解JWT认证之前,我们先来看看传统的Session会话认证吧。

Session会话认证

在Session会话认证模型中,在用户登录并授权后,服务器将创建客户端唯一的Session。服务器将Session ID返回给客户端,然后客户端将其存储在浏览器的cookie中。在随后的HTTP调用中,cookie将自动包含在HTTP请求头中,服务器将通过cookie中记录的Session ID得知客户端的身份。尽管cookie存储在客户端,但是由于验证是在服务器上完成的,因此该认证模型属于服务器端会话。

成都Java开发工程师:什么是JWT令牌认证?

说到这里,您可能会想:HTTP协议不是无状态的么?那服务器如何记住客户端的身份?

服务器端会话:实际上不是无状态的

从技术上讲,HTTP无状态协议不会禁止服务器存储信息。大多数Web应用程序都需要存储某种形式的状态,以便知道客户端的Session ID是否有效。例如,服务器可能会把Session ID存储在服务器内存,这样,只要先前经过身份验证的客户端再次发出请求,服务器就可以简单地在内存查找Session ID,并验证客户端是否已经通过了身份验证。

Session认证的优点

Session ID有过期时间

Session ID可以被撤销/删除

Cookie的数据量少,存储Session ID非常轻便

Session认证的缺点

分布式/跨服务器架构 中的Session ID共享问题

成都Java开发工程师:什么是JWT令牌认证?

在分布式架构中,客户端在其中一台服务器验证通过后,Session ID只会存储在当前服务器中,当客户端访问其他服务器时,并不能查找到之前的Session ID,这样就无法正常验证了。为了确保所有服务器具有相同Session ID,其中一种方法是让所有服务器使用共享的Redis缓存(如上图所示)。

JWT令牌认证

在JWT(JSON Web Token)认证模型中,服务器不会在用户登录后返回Session ID,而是将签名(加密)的Token字符串返回给客户端。此签名的Token本质上是一个JSON对象,其中包含服务器使用私钥或公钥/私钥签名的身份验证信息。

在后续的HTTP请求中,客户端只需要在请求中传递该JWT加密字符串,并且确保每个服务器实例都可以解密Token并验证用户身份。

JWT的优点

无需使用缓存/数据库来存储Session ID

JWT的缺点

无法从服务器撤消Token,服务器只能确定Token是否有效

上一篇:培训java多少钱成都?java CH03操作符
下一篇:成都学JAVA哪家好?mybatis-执行getById

成都java培训怎么样?达内java培训班靠谱吗?

成都哪家java培训好?推荐达内Java软件开发培训学校

成都java培训学费-达内教育Java培训费用是多少钱?

成都数据分析师培训班:关于什么是大数据和数据分析?

选择城市和中心
江西省

贵州省

广西省

海南省