JSON Web Token是什么? | 青训营笔记

554 阅读2分钟

这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记

什么是JWT?

  • JSON Web Token(缩写JWT)是一个 JSON 对象, 在 RFC 7519 中定义为一种用来表示双方信息集的安全方式。

  • 是目前最流行的跨域认证解决方案

  • 原理是客户端发起用户登录请求,服务器端接收并认证成功后,生成一个 JSON 对象,然后将其返回给客户端。

image.png


JWT的优势

相比于传统的服务端验证,JWT有以下优点:

  • 充分依赖无状态API,契合RESTful设计原则

  • 易于实现CDN,将静态资源分布式管理

  • 验证解耦时无需使用特定的身份验证方案,token可以在任何地方生成

  • 比cookie 更支持原生移动端应用


JWT的基本数据结构

image.png

Header(头部)、Payload(负载)、Signature(签名)组成

这里阮一峰老师的讲解十分详细,这里就不做赘述了,附上链接:JSON Web Token 入门教程 - 阮一峰的网络日志 (ruanyifeng.com)


JWT的认证流程

  • 用户输入用户名/密码登录,服务端认证成功后,会返回给客户端一个 JWT

  • 客户端将 token 保存到本地(通常使用 localstorage,也可以使用 cookie)

  • 当用户希望访问一个受保护的路由或者资源的时候,需要请求头的 Authorization 字段中使用Bearer 模式添加 JWT,其内容看起来是这样 Authorization: Bearer <token>

服务端的保护路由将会检查请求头 Authorization 中的 JWT 信息,如果合法,则允许用户的行为

因为 JWT 是自包含的(内部包含了一些会话信息),因此减少了需要查询数据库的需要

因为 JWT 并不使用 Cookie 的,所以你可以使用任何域名提供你的 API 服务而不需要担心跨域资源共享问题(CORS)

因为用户的状态不再存储在服务端的内存中,所以这是一种无状态的认证机制


参考文献