Django(65)jwt认证原理

本文详细介绍了JWT(JSON Web Token)的原理、优势、组成及加密方式,并结合Django框架展示了JWT的使用方法、代码实现以及实战案例,包括手机号、邮箱和账号密码登录方式。同时,探讨了如何在Django中自定义JWT权限验证。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

前言

带着问题学习是最有目的性的,我们先提出以下几个问题,看看通过这篇博客的讲解,能解决问题吗?

  1. 什么是JWT?
  2. 为什么要用JWT?它有什么优势?
  3. JWT的认证流程是怎样的?
  4. JWT的工作原理?

我们带着4个问题进入学习

1.什么是JWT?

JWT全称Json Web Token,JWT 是一种开发的行业标准 RFC 7519 ,用于安全的表示双方之间的声明。目前,JWT广泛应用在系统的用户认证方面,特别是现在前后端分离项目。

2.为什么要使用JWT?它有什么优势?

用户登录认证方式分为传统的token登录方式和JWT 方式,传统的方式又分为session登录和缓存登录

2.1 session登录

"""
接收到登录请求, 1.得到用户 2.产生token 3.记录到session表 4.返回token

接收需要认证信息的请求, 1.拿到token 2.数据库校验 3.确定登录用户 4.返回认证后信息           与数据库session表交互
"""

2.2 缓存登录

"""
接收到登录请求, 1.得到用户 2.产生token 3.记录到缓存 4.返回token

接收需要认证信息的请求, 1.拿到token 2.缓存校验 3.确定登录用户 4.返回认证后信息            用户登录信息缓存存储
"""

2.3 JWT方式

"""
接收到登录请求, 1.得到用户 2.根据用户产生有用户信息的token 3.返回token

接收需要认证信息的请求, 1.拿到token 2.检验token是否合法,校验出用户 3.返回认证后信息
"""

2.4 JWT优点

  1. 服务器不需要存储tokentoken交给每一个客户端自己存储,服务器压力小
  2. 服务器存储的是 签发和校验token两段算法,签发认证的效率高
  3. 算法完成各集群服务器同步成本低,路由项目完成集群部署(适应高并发)

2.5 JWT特点

  1. token一定在服务器产生,且在服务器校验
  2. token一定参与网络传输
  3. token携带的信息存在能被反解不能被反解的多部分组成

3.JWT组成以及加密原理

JWT是由头部header、载荷payload、签名signature,三段式组成,用.进行拼接,例如官网的这段字符串

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJzdWIiOiIxMjM0NTY3ODkwIiwibmFtZSI6IkpvaG4gRG9lIiwiaWF0IjoxNTE2MjM5MDIyfQ.SflKxwRJSMeKKF2QT4fwpMeJf36POk6yJV_adQssw5c

每一部分都是一个json字典加密形参的字符串,头部和载荷采用的是base64url加密(前台后台都可以解密),签名采用hash256不可逆加密注意:base64url加密是先做base64加密,然后再将字符串中的 - 替代 + _替代 /

3.1 Header

头部包含了两部分,token 类型和采用的加密算法

{
  "alg": "HS256",
  "typ": "JWT"
}
  • typ: (Type)类型,指明类型是JWT
  • alg: (Algorithm)算法,必须是JWS支持的算法,主要是HS256RS256

它会使用 base64url编码组成 JWT 结构的第一部分

3.2 Payload

这部分就是我们存放信息的地方了,你可以把用户ID等信息放在这里,JWT规范里面对这部分有进行了比较详细的介绍,JWT 规定了7个官方字段,供选用

  • iss (issuer):签发人
  • exp (expiration time):过期时间,时间戳
  • sub (subject):主题
  • aud (audience):受众
  • nbf (Not Before):生效时间,时间戳
  • iat (Issued At):签发时间,时间戳
  • jti (JWT ID):编号

常用的有

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值