一.主要缺陷:

  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. JavaScript中的栈内存和堆内存

    首先JavaScript中的变量分为基本类型和引用类型.基本类型就是保存在栈内存中的简单数据段,而引用类型指的是那些保存在堆内存中的对象. 1.基本类型 基本类型有Undefined.Null.Boo ...

  2. 强化学习(四)—— DQN系列(DQN, Nature DQN, DDQN, Dueling DQN等)

    1 概述 在之前介绍的几种方法,我们对值函数一直有一个很大的限制,那就是它们需要用表格的形式表示.虽说表格形式对于求解有很大的帮助,但它也有自己的缺点.如果问题的状态和行动的空间非常大,使用表格表示难 ...

  3. Spring事务嵌套

    学习一下Spring的事务嵌套:https://blog.csdn.net/zmx729618/article/details/77976793 重点句子: Juergen Hoeller 的话:   ...

  4. day03-课堂笔记

    # 数据类型"""# int# py2存放长整型:long# py3环境,所以整型均由int存储num1 = -10num2 = 10000000000000000000 ...

  5. linux stat 查看文件的详细信息

    linux stat查看文件详细信息 [root@oldboy01 tmp]# stat /tmp/1.cc File: `/tmp/1.cc' Size: 4 Blocks: 8 IO Block: ...

  6. 3-jsp 内置对象、转发与重定向

    1.request:请求常用api: getParameter("name"):获取页面表单单个元素的值 getParameterValues("name"): ...

  7. XSS高级利用

    XSS会话劫持 (1)Cookie简介 Cookie是能够让网站服务器把少量文本数据存储到客户端的硬盘.内存,或者是从客户端的硬盘.内存读取数据的一种技术. Cookie是一段随HTTP请求.响应一起 ...

  8. Linux并发与同步专题 (3) 信号量

    关键词:Semaphore.down()/up(). <Linux并发与同步专题 (1)原子操作和内存屏障> <Linux并发与同步专题 (2)spinlock> <Li ...

  9. KNN-笔记(1)

    1 - 背景 KNN:k近邻,表示基于k个最近的邻居的一种机器学习方法.该方法原理简单,构造方便.且是一个非参数化模型. KNN是一个"懒学习"方法,也就是其本身没有训练过程.只有 ...

  10. Apache Spark 内存管理详解(转载)

    Spark 作为一个基于内存的分布式计算引擎,其内存管理模块在整个系统中扮演着非常重要的角色.理解 Spark 内存管理的基本原理,有助于更好地开发 Spark 应用程序和进行性能调优.本文旨在梳理出 ...