这是我参与「第三届青训营 -后端场」笔记创作活动的的第5篇笔记
什么是JWT?
-
JSON Web Token(缩写JWT)是一个 JSON 对象, 在 RFC 7519 中定义为一种用来表示双方信息集的安全方式。
-
是目前最流行的跨域认证解决方案
-
原理是客户端发起用户登录请求,服务器端接收并认证成功后,生成一个 JSON 对象,然后将其返回给客户端。
JWT的优势
相比于传统的服务端验证,JWT有以下优点:
-
充分依赖无状态API,契合RESTful设计原则
-
易于实现CDN,将静态资源分布式管理
-
验证解耦时无需使用特定的身份验证方案,token可以在任何地方生成
-
比cookie 更支持原生移动端应用
JWT的基本数据结构
由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)
因为用户的状态不再存储在服务端的内存中,所以这是一种无状态的认证机制