一.主要缺陷:

  1.Token验证是放在一张表中,即authtoken_token中,key没有失效时间,永久有效,一旦泄露,后果不可想象,安全性极差。

  2.不利于分布式部署或多个系统使用一套验证,authtoken_token是放在某台服务器上的,如果分布式部署,将失效,或多个系统用一套验证,将必须复制该表到相应服务器上,麻烦费力。

  详情参照:http://lion1ou.win/2017/01/18/

二.jwt的使用:

  1.安装:

    1.1pip install djangorestframework-jwt;

    1.2在githup上找源码安装

  2.配置:

    2.1在你的settings.py,添加JSONWebTokenAuthentication到Django REST框架DEFAULT_AUTHENTICATION_CLASSES

        REST_FRAMEWORK = {
           'DEFAULT_PERMISSION_CLASSES': (
          'rest_framework.permissions.IsAuthenticated',
                         ),
           'DEFAULT_AUTHENTICATION_CLASSES': (
         'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
         'rest_framework.authentication.SessionAuthentication',
          'rest_framework.authentication.BasicAuthentication',
             ),
            }

    2.2在您urls.py添加以下URL路由以启用通过POST获取令牌包括用户的用户名和密码。

        from rest_framework_jwt.views import obtain_jwt_token
          #...           urlpatterns = [
         '',
           # ...        url(r'^api-token-auth/', obtain_jwt_token),
            ]      

    2.3jwt相关使用(setting.py中配置):

import datetime
JWT_AUTH={
#Token失效时间
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=7),
#Token前缀
'JWT_AUTH_HEADER_PREFIX': 'JWT'
}

    2.4自定义用户验证(obtain_jwt_token默认为使用用户名和密码):

#views中重写authenticate认证
from django.contrib.auth.backends import ModelBackend
User=get_user_model()

# Create your views here.
class CustomBackend(ModelBackend):
'''
自定义用户验证(setting.py)
'''
def authenticate(self, username=None, password=None, **kwargs):
try:
user=UserProfile.objects.get(Q(username=username)|Q(mobile=username))
if user.check_password(password):
  return user
except Exception as e:
return None
#setting中添加BANCENDS
AUTHENTICATION_BACKENDS=(
#将bancends添加进setting
'users.views.CustomBackend', )

           详情参照: http://getblimp.github.io/django-rest-framework-jwt/

  

Django restframework之Token验证的缺陷及jwt的简单使用的更多相关文章

  1. Django中csrf token验证原理

    我多年没维护的博客园,有一篇初学Django时的笔记,记录了关于django-csrftoekn使用笔记,当时几乎是照抄官网的使用示例,后来工作全是用的flask.博客园也没有维护.直到我的博客收到了 ...

  2. 基于restframework进行token验证

    一般情况下,进入到web网站主页都需要进行token或者其它验证,不能在没有登录的情况下可以查看主页的内容,在用户输入用户名密码后,进行校验成功,后台会返回一个token,用于用于下次访问主页或其它页 ...

  3. Django rest-framework框架-CSRF验证

    settings.py里面有一个中间件 django.middleware.csrf.CsrfViewmiddleware  #如果注释掉全站不需要csrf验证  如果打开全站都要csrf验证 全局使 ...

  4. Django 利用JWT实现前后端分离的Token验证

    一.什么是Token? Token是服务端生成的一串字符串,以作客户端进行请求的一个令牌,当第一次登录后,服务器会生成一个Token并将此Token返回给客户端,以后客户端只需带上这个Token前来请 ...

  5. django restframework

    一.django restframework 请求流程源码剖析 上面的认证一个流程是rest_framework的关于APIauth的认证流程,,这个流程试用权限.频率.版本.认证.这个四个组件都是通 ...

  6. django restframework jwt

    既然要来学习jwt(json web token),那么我们肯定是先要了解jwt的优势以及应用场景--跨域认证. $ pip install djangorestframework-jwt 传统coo ...

  7. django restframework 的日常使用

    本文讨论 django restframework 的日常使用,满足常用 api 编写的需求,比如 List, Detail, Update, Put, Patch 等等.探讨 django rest ...

  8. Django rest-framework框架-认证组件的简单实例

    第一版 : 自己写函数实现用户认证 #models from django.db import models #用户表 class UserInfo(models.Model): user_type_ ...

  9. django restframework 教程之Serialization(序列化)

    介绍 本教程将会通过创建一个简单的粘贴代码项目,突出显示WebAPI,过程中,会介绍组成REST框架的各种组件,让你全面了解如何配合使用. 环境设置 建议使用virtualenv建立新的虚拟环境,确保 ...

随机推荐

  1. vue数据绑定数组,改变元素时不更新view问题

    关于这个问题,官网上说的很清楚官方文档  写个例子HTML<body> <div class="box"> <div v-for="aa i ...

  2. RocketMQ事务消息-demo

    RocketMQ为4.3.0版本(我这种写法4.2.0不行) 如果你之前用的其他版本,需要去修改下系统的环境变量 maven工程用到的jar包 <dependencies> <!-- ...

  3. UVA1601-The Morning after Halloween(双向BFS)

    Problem UVA1601-The Morning after Halloween Accept: 289 Submit: 3136 Time Limit: 12000 mSec  Problem ...

  4. 【转】Android hdpi ldpi mdpi xhdpi xxhdpi适配详解

    1.了解几个概念(1)分辨率.分辨率就是手机屏幕的像素点数,一般描述成屏幕的“宽×高”,安卓手机屏幕常见的分辨率有480×800.720×1280.1080×1920等.720×1280表示此屏幕在宽 ...

  5. Python:Day55 ORM多表操作

    命令行创建UTF8数据库: CREATE DATABASE 数据库名称 DEFAULT CHARSET utf8 COLLATE utf8_general_ci; 创建多表(外键)

  6. 9.1 oop习题集合

    [练习题]01.类的成员变量 猜数字游戏一个类A有一个成员变量v有一个初值100.定义一个类对A类的成员变量v进行猜.如果大了则提示大了小了则提示小了.等于则提示猜测成功. import j ...

  7. Keepalive工作原理

    Keepalive工作原理 1.1软件介绍 Keepalived软件起初是专为LVS负载均衡软件设计的,用来管理并监控LVS集群系统中各个服务节点的状态,后来又加入了可以实现高可用的VRRP功能.因此 ...

  8. [MicroPython]TPYBoard智能小车“飞奔的TPYBoard装甲一号”

    智能小车作为现代的新发明,是以后的发展方向,他可以按照预先设定的模式在一个环境里自动的运作,不需要人为的管理,可应用于科学勘探等等的用途.智能小车能够实时显示时间.速度.里程,具有自动寻迹.寻光.避障 ...

  9. 长期招收linux驱动工程师

    公司:宝存科技 工作内容: 1.负责企业级ssd的feature设计和开发工作 2.负责ftl算法的设计及开发 3.排查客户问题 任职要求: 1.精通C语言 2.熟练掌握linux操作系统使用 3.熟 ...

  10. STM32中断优先级彻底讲解

    一.综述      STM32 目前支持的中断共为 84 个(16 个内核+68 个外部), 16 级可编程中断优先级的设置(仅使用中断优先级设置 8bit 中的高 4 位)和16个抢占优先级(因为抢 ...