什么是JWT | 青训营笔记

137 阅读3分钟

这是我参与「第五届青训营 」伴学笔记创作活动的第8天

一、引言

在我们青训营大作业中,实现极简版抖音的服务器端需要一种功能,那就是用户鉴权,简单来说就是在客户端登录app时候,需要对该用户使用数据业务的合法性和有效性(状态是否为激活)进行检查。就是验证用户是否可以登录,该用户的权限如何。这样才能保证业务的安全性和可行性,也是最基本的。 那如何实现用户鉴权呢?这边采用JWT进行实现。

二、什么是 JWT?

JWT(json web token),是目前最流行的跨域认证解决方案,它并不是一个具体的技术实现,而更像是一种标准。JWT规定了数据传输的结构,一串完整的JWT由三段落组成,每个段落用英文句号连接(.),他们分别是:Header、Payload、Signature,所以,常规的JWT内容格式是这样的:AAA.BBB.CCC。并且,这一串内容会base64加密;也就是说base64解码就可以看到实际传输的内容。JWT的原理是,在服务器进行认证后,生成一个JSON对象,发回给用户,就像下面

  "姓名": "张三",
  "角色": "管理员",
  "到期时间": "2022年5月27日0点0分"

之后,在客户端和服务器端通信的过程中,都要发回这个JSON对象。也就是说服务器完全就是依靠这个JSON对象来认定用户的身份。 再说一下上面提到的格式:header包含加密的方式、type;Payload顾名思义,就会包含实际传递的参数内容;signat主要决定了Header、Payload有没有被人篡改;如果内容被篡改,那么这条JWT将会被视为无效。

三、如何工作

那么,一串JWT如何发挥它的作用呢?正常来说,每一次请求都像图里这样就传入就可以了。

775522-20201110115953800-274756186.png 基本上绝大部分的人都用JWT做登录授权,它相比原先的session、cookie来说,更快更安全,跨域也不再是问题,更关键的是更加优雅。 大作业项目中可以使用用户id+ip地址生成token来进行实现。

四、总结

  • JWT默认是不加密的,也可以进行加密;
  • JWT不仅可以进行鉴权,也可以进行信息交换,但交换信息并不好用;
  • JWT 本身包含了认证信息,一旦泄露,任何人都可以获得该令牌的所有权限。为了减少盗用,JWT 的有效期应该设置得比较短。对于一些比较重要的权限,使用时应该再次对用户进行认证。
  • JWT 的最大缺点是,由于服务器不保存 session 状态,因此无法在使用过程中废止某个 token,或者更改 token 的权限。也就是说,一旦 JWT 签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。

五、参考引用

[1](什么是JWT? - 老马-Max - 博客园 (cnblogs.com))

[2](【项目必会】用户鉴权是什么?jwt有什么用? | 青训营笔记 - 掘金 (juejin.cn))