Django 使用JWT认证:JWT认证流程及前后端使用流程|周末学习

本文已参与 周末学习计划,点击查看详情

这是我参与更文挑战的第4天,活动详情查看: 更文挑战

JWT认证流程

  1. 用户向服务器提交用户信息
  2. 服务器验证用户的信息
  3. 服务器通过验证时,发送给用户一个Token
  4. 客户端存储Token,并在每次请求时附送上这个Token值
  5. 服务端验证Token值,并返回数据

JWT使用流程图

image.png

JWT的优缺点

  • 优点:
    1. 通用:基于json的通用性,JWT是可以进行跨语言支持的,如JAVA、Python等语言都可以使用
    2. 可存储部分非敏感数据:可以在JWT的payload部分存储一些其他业务逻辑所必要的非敏感信息
    3. 便于传输:JWT的构成非常简单,字节占用很小,所以它是非常便于传输的
    4. 易于拓展:它不需要在服务端保存会话信息, 所以它易于应用的扩展
  • 缺点(注意事项):
    1. 不应存放敏感数据:客户端可以使用Base64URL算法解密payload部分,因而安全性无法保证
    2. 保护好私钥:私钥(secret)用于服务端的认证,如透露将可能导致认证失效
    3. 无法废止或修改Token:由于服务器不保存状态,因此无法在使用过程中废止某个 token,或者更改 token 的权限。一旦 JWT 签发了,在到期之前就会始终有效,除非服务器部署额外的逻辑。

前端如何使用JWT?

  • 前端收到服务器返回的 JWT,可以储存在 Cookie 或 localStorage 中。
  • 此后,前端每次与服务器通信,都要带上这个 JWT:
    • [ 不推荐 ] 放在 Cookie 里面自动发送,但是这样不能跨域
    • [ 其它方法 ] 放在 Cookie 内,跨域的时候,JWT 就放在 POST 请求的数据体里面。
    • [ 推荐 ] 放在 HTTP 请求的头信息 Authorization 字段里面Authorization: Bearer <token>
fetch('api/user/1', {
  headers: {
    'Authorization': 'Bearer ' + token
  }
})
复制代码

后端(Django)如何使用JWT?

Django 可以基于DRF(Django REST framework),使用插件Simple JWT(djangorestframework-simplejwt)快速实现JWT认证。

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享