jwt认证生成后的token后端解析

一.首先前端发送token

token所在的位置headers

{'authorization':token的值',Content-Type':application/json}

在ajax写

//只展示headers部分代码
headers:{"authorization":this.$cookies.get("token")}
//token值一般是放在cookies里面
//ajax提交默认就是json格式所有不需要声明js格式

二.后端接受并解析token

1.首先先定义个认证类

from rest_framework.exceptions import AuthenticationFailed
import jwt
from rest_framework_jwt.authentication import BaseJSONWebTokenAuthentication
from rest_framework_jwt.authentication import jwt_decode_handler
from rest_framework_jwt.authentication import get_authorization_header
class JWTAuthentication(BaseJSONWebTokenAuthentication):
# 自定义认证类,重写authenticate方法
def authenticate(self, request):
# 认证通过,返回user,auth
# 认证失败,返回None
# auth = request.META.get('HTTP_AUTHORIZATION') # 前台用auth携带token
# 通过前台传过来的请求头中获取auth
auth = get_authorization_header(request)
if not auth:
raise AuthenticationFailed('Authorization 字段是必须的')
try:
payload = jwt_decode_handler(auth) # 出现jwt解析异常,直接抛出异常,代表非法用户,也可以返回None,作为游客处理
except jwt.ExpiredSignature:
raise AuthenticationFailed('token已过期')
except:
raise AuthenticationFailed('token非法') user = self.authenticate_credentials(payload)
return (user, auth)

关于其中的几个方法

  • auth = request.META.get('HTTP_AUTHORIZATION') 获取token的字符串格式
  • auth = get_authorization_header(reuqest对象) 获取token的二进制格式
  • jwt_decode_handler(token的二进制格式)
    • 如果token没有过期:返回用户信息
    • 如果token过期:抛异常,过期的异常是jwt.ExpiredSignature
  • authenticate_credentials(jwt_decode_handler解析后信息)返回user对象

2.局部调用用户认证类

#评率认证类写法
from rest_framework.throttling import SimpleRateThrottle class SMSRateThrottle(SimpleRateThrottle):
scope = 'sms' #这个是为了全局设置给予的一个变量名称 # 只对提交手机号的get方法进行限制
def get_cache_key(self, request, view):
mobile = request.query_params.get('mobile')
# 没有手机号,就不做频率限制
if not mobile:
return None
# 返回可以根据手机号动态变化,且不易重复的字符串,作为操作缓存的key
return 'throttle_%(scope)s_%(ident)s' % {'scope': self.scope, 'ident': mobile}
class Test(APIView):
authentication_classes = [我们自定义用户认证的类] #如[JWTAuthentication]
#来判断登入账号的信息算游客还是正常用户 permission_classes =[IsAuthenticated]
#给与权限
#AllowAny:允许所有
#IsAuthenticated:只允许登入用户
#IsAuthenticatedOrReadOnly:游客只读,登录用户无限制
#IsAdminUser:是否是后台用户 DEFAULT_THROTTLE_RATES = [频率认证类]#如[SMSRateThrottle]
#局部评率认证 #满足以上给予的权限才可以进行下面的操作

3.全局调用用户认证类

setting.py中

#drf配置
"""
AllowAny:允许所有用户
IsAuthenticated:只允许登录用户
IsAuthenticatedOrReadOnly:游客只读,登录用户无限制
IsAdminUser:是否是后台用户
"""
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
# django默认session校验:校验规则 游客 及 登录用户
# 'rest_framework.authentication.SessionAuthentication',
# 'rest_framework.authentication.BasicAuthentication',
# 'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'api.authentications.JWTAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
# 'rest_framework.permissions.AllowAny',
# 全局配置:一站式网站(所有操作都需要登录后才能访问)
# 'rest_framework.permissions.IsAuthenticated',
],
'DEFAULT_THROTTLE_RATES': {
'user': '5/min', # 登录的用户一分钟可以访问5次
'anon': '3/min', # 游客一分钟可以访问3次
'sms': '1/min' #同一个手机1分钟一次
}
} jwt配置
import datetime
JWT_AUTH = {
'JWT_EXPIRATION_DELTA': datetime.timedelta(seconds=1000), #生成token有效期
'JWT_AUTH_HEADER_PREFIX': 'TOKEN',
}

jwt认证生成后的token如何传回后端并解析的详解的更多相关文章

  1. jwt认证生成后的token后端解析

    一.首先前端发送token token所在的位置headers {'authorization':token的值',Content-Type':application/json} 在ajax写 //只 ...

  2. 把旧系统迁移到.Net Core 2.0 日记 (18) --JWT 认证(Json Web Token)

    我们最常用的认证系统是Cookie认证,通常用一般需要人工登录的系统,用户访问授权范围的url时,会自动Redirect到Account/Login,登录后把认证结果存在cookie里. 系统只要找到 ...

  3. 9) drf JWT 认证 签发与校验token 多方式登陆 自定义认证规则反爬 admin密文显示

    一 .认证方法比较 1.认证规则图 django 前后端不分离 csrf认证 drf 前后端分离 禁用csrf 2. 认证规则演变图 数据库session认证:低效 缓存认证:高效 jwt认证:高效 ...

  4. vue项目打包后使用reverse-sourcemap反编译到源码(详解版)

    首先得说一下,vue项目中productionSourceMap这个属性.该属性对应的值为true|false.   当productionSourceMap: true,时: 1.打包后能看到xxx ...

  5. Spring Security教程(八):用户认证流程源码详解

    本篇文章主要围绕下面几个问题来深入源码: 用户认证流程 认证结果如何在多个请求之间共享 获取认证用户信息 一.用户认证流程 上节中提到Spring Security核心就是一系列的过滤器链,当一个请求 ...

  6. JWT(Json web token)认证详解

    JWT(Json web token)认证详解 什么是JWT Json web token (JWT), 是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准((RFC 7519).该to ...

  7. JWT的优点和实现Token认证的安全问题

    JWT的优点和实现Token认证的安全问题 一.什么是JWT JWT——Json web token  是为了在网络应用环境间传递声明而执行的一种基于JSON的开放标准,可实现无状态.分布式的Web应 ...

  8. ASP.NET Core 3.1使用JWT认证Token授权 以及刷新Token

    传统Session所暴露的问题 Session: 用户每次在计算机身份认证之后,在服务器内存中会存放一个session,在客户端会保存一个cookie,以便在下次用户请求时进行身份核验.但是这样就暴露 ...

  9. 授权认证登录之 Cookie、Session、Token、JWT 详解

    一.先了解几个基础概念 什么是认证(Authentication) 通俗地讲就是验证当前用户的身份. 互联网中的认证: 用户名密码登录 邮箱发送登录链接 手机号接收验证码 只要你能收到邮箱/验证码,就 ...

随机推荐

  1. WPF系列 —— 控件添加依赖属性(转)

    WPF系列 —— 控件添加依赖属性 依赖属性的概念,用途 ,如何新建与使用.本文用做一个自定义TimePicker控件来演示WPF的依赖属性的简单应用. 先上TimePicker的一个效果图. 概念 ...

  2. WTL 9.0的变化 - atlctrls.h

    atlctrls.h中是对控件的封装. 第1249行增加: void GetMargins(UINT& nLeft, UINT& nRight) const { ATLASSERT(: ...

  3. 09-cmake语法-add_dependencies()

    在编译器的命令行上,为当前路径以及下层路径的源文件加入一些define flag.这个命令可以用来引入任何flag,但是它的原意是用来引入预处理器的定义.那些以-D或/D开头的.看起来像预处理器定义的 ...

  4. 【mybatis】JdbcType 与Oracle、MySql数据类型对应关系

  5. this指向问题(改变它的指向)

    这个问题倒不是面向对象的,而是今天遇到js面向对象的时候一个例子的时候突然遇到了,call()方法,然后自己突然发现竟然忘记了,查了之后整理如下: xxx.call((对象名),参数a,参数b) xx ...

  6. 异常CLRDBG_NOTIFICATION_EXCEPTION_CODE( 0x04242420)的抛出过程

    新建一个c#控制工程,就用自动生成的代码,不用补任何代码,如下: using System; using System.Collections.Generic; using System.Linq; ...

  7. Dijkstra单源点最短路径算法

    学习参考: Dijkstra算法(单源最短路径) 最短路径—Dijkstra算法和Floyd算法 使用的图结构: 邻接矩阵: -1 20 -1 25 80-1 -1 40 -1 -1-1 -1 -1 ...

  8. [SDOI2018]物理实验 set,扫描线,旋转坐标系

    [SDOI2018]物理实验 set,扫描线,旋转坐标系 链接 loj 思路 先将导轨移到原点,然后旋转坐标系,参考博客. 然后分线段,每段的贡献(三角函数值)求出来,用自己喜欢的平衡树,我选set. ...

  9. # 数位DP入坑

    Hdu 2089 不要62 #include<iostream> #include<cstdio> #include<cmath> #include<cstr ...

  10. react-native-cli运行项目及打包apk失败的解决过程

    刚开始学习react native,第一步自然是搭建好开发环境,node及jdk本身就有,Python2.Android studio以及Android sdk的安装倒是没什么大问题,按照官网的教程做 ...