认证Authentication

什么是身份认证

身份验证是将传入请求与一组标识凭据(例如请求来自的用户或与其签名的令牌)关联的机制。

视图的最开始处运行身份验证

在权限和限制检查发生之前,以及在允许继续执行任何其他代码之前,始终在视图的最开始处运行身份验证。

身份验证方案总是定义为类的列表

REST框架尝试对列表中的每个类进行身份验证,并将成功身份验证的第一个类的返回值赋值给request.user request.auth。 如果没有类身份验证,则request.user将设置为django.contrib.auth.models.anonymousUser的实例,request.auth将设置为none。

验证的执行过程

1、在APIView中重写 dispatch方法,方法最后有一段描述:    

# Ensure that the incoming request is permitted       确保传入进来的

request是被允许的 self.perform_authentication(request)  #执行验证

self.check_permissions(request)         #检查全选

self.check_throttles(request)         #检查阀门

2、def perform_authentication(self, request): request.user

这个方法只有这么一句话 获取user 其实这是Request类的一个user方法

3、@property

def user(self): 走到 def _authenticate(self):

方法 在这个方法中有   for authenticator in self.authenticators:

            user_auth_tuple = authenticator.authenticate(self)

表示遍历我们设置的authentication_classes属性中的所有验证类列表,每个验证类都去执行类中的authenticate()方法。

BasicAuthentication(了解)

BasicAuthentication

此身份验证方案使用HTTP基本身份验证,根据用户的用户名和密码进行签名。基本身份验证通常只适用于测试。

如果验证成功,则basicauthentication提供以下凭据。

①  request.user将是Django用户实例

②  request.auth将为无

③  HTTP 401未经身份验证,

 并带有适当的www-authenticate头。例如:www authenticate:basic realm=“api”

SessionAuthentication(了解)

此身份验证方案使用Django的默认会话后端进行身份验证。会话身份验证适用于与网站在同一会话上下文中运行的Ajax客户端。

如果验证成功,sessionauthentication将提供以下凭据。

①  request.user将是Django用户实例。

②  request.auth将为无。

③  拒绝权限的未经身份验证的响应将导致HTTP 403禁止响应。

postman

Postman 是一个很强大的 API调试、Http请求的工具。 有chrome插件版, 有本地软件版,这里是有本地安装包安装。

认证类配置

局部配置 在具体的view类中写

authentication_classes = [BearerToken]

全局配置

在setting中配置

REST_FRAMEWORK = {

      'DEFAULT_AUTHENTICATION_CLASSES': (

      'rest_framework.authentication.BasicAuthentication',

      'rest_framework.authentication.SessionAuthentication',

      ) }

TokenAuthentication

此身份验证方案使用简单的基于令牌HTTP身份验证。令牌身份验证适用于client-server分离的情况,如本机桌面和移动客户端。

如果验证成功,TokenAuthentication 将提供以下凭据。

  request.user将是Django用户实例。

②  request.auth将是rest_framework.authtoken.models.Token实例。

③  拒绝权限的未经身份验证的响应将导致HTTP 401 Unauthorized。

Token验证使用

使用步骤

  把rest_framework.authtoken添加到INSTALLED_APPS

  把TokenAuthentication类写入authenticate_classes属性中

  migration迁移数据库 因为会生成Token相关的数据表

  配置token的路由: from rest_framework.authtoken import views

           path("api-token/", views.obtain_auth_token)

Token验证使用

获取Token key令牌 令牌要包含Authorization HTTP header Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b

如果验证通过,TokenAuthentication 提供以下凭证:request.user Django自带的User模型实例

①  request.auth rest_framework中的Token模型实例

②  验证失败,则返回HTTP 401 Unauthorized 并携带WWW-Authenticate 头信息

例如:WWW-Authenticate: Token

Token总结:

1、令牌的好处:避免在使用中不断的输入账号和密码,比较安全

2、如果要测试带token的接口,首先要进行登录,登录成功会有个token信息,向api接口发送请求的时候必须带上这个token,

故需要做2次请求(1,登录,拿到token 2,正式对接口进行测试)

自定义Token(重点)

继承BaseAuthentication   

重写authenticate

返回return 两个值

续更 ...待续...

django-rest-framework框架 第四篇 认证Authentication的更多相关文章

  1. Django Rest framework 框架之认证使用和源码执行流程

    用这个框架需要先安装: pip3 install djangorestframework 如果写了一个CBV的东西,继承了View. # 继承Django里面View class APIView(Vi ...

  2. web前端Vue+Django rest framework 框架 生鲜电商项目实战✍✍✍

    web前端Vue+Django rest framework 框架 生鲜电商项目实战  整个课程都看完了,这个课程的分享可以往下看,下面有链接,之前做java开发也做了一些年头,也分享下自己看这个视频 ...

  3. Django REST framework框架介绍和基本使用

    Django REST framework介绍 Django REST framework是基于Django实现的一个RESTful风格API框架,能够帮助我们快速开发RESTful风格的API. 官 ...

  4. Django Rest Framework框架 ---- url控制器

    Django Rest Framework框架 ---- url控制器

  5. web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 ☝☝☝

    web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程    web前端Vue+Django rest framework 框架 生鲜电商项目实战视频教程 学习 ...

  6. 【系统安全性】四、认证Authentication

    四.认证Authentication 1.为什么要认证 对请求.数据进行认证,判断伪造的数据 HTTP请求很脆弱,抓包软件很强大,容易伪造身份,非法获取数据 2.摘要认证 对象:客户端参数.服务端响应 ...

  7. Django Rest Framework源码剖析(一)-----认证

    一.简介 Django REST Framework(简称DRF),是一个用于构建Web API的强大且灵活的工具包. 先说说REST:REST是一种Web API设计标准,是目前比较成熟的一套互联网 ...

  8. Django Rest framework 框架

    一.开发模式: 1. 普通开发方式(前后端放在一起写) 2. 前后端分离(前后台通过ajaxo交互) 后端(django rest framework写的) <----ajaxo---> ...

  9. Django rest framework源码分析(一) 认证

    一.基础 最近正好有机会去写一些可视化的东西,就想着前后端分离,想使用django rest framework写一些,顺便复习一下django rest framework的知识,只是顺便哦,好吧. ...

随机推荐

  1. BZOJ 3262 cdq分治 OR 树套树

    注意判断 三个条件都一样的-- (CDQ分治 其实并不是很难理解 只是想不到--) CDQ分治: //By SiriusRen #include <cstdio> #include < ...

  2. UVALive - 6266 Admiral 费用流

    UVALive - 6266 Admiral 题意:找两条完全不相交不重复的路使得权值和最小. 思路:比赛的时候时间都卡在D题了,没有仔细的想这题,其实还是很简单的,将每个点拆开,连一条容量为1,费用 ...

  3. Android自定义控件简单实现ratingbar效果

    先上图: 一开始让我自定义控件我是拒绝的,因为android很早以前就有一个控件ratingbar,但是设置样式的时候我发现把图片设置小一点就显示不全,一直找不到解办法!(可以设置系统的自带的小样式) ...

  4. 威联通 移动硬盘路径 /share/USBDisk1

    威联通 移动硬盘路径 /share/USBDisk1 cd /share/USBDisk3/Movies

  5. Hexo 自动同步

    灵感 最近认证阿里云学生用户,参与ESC服务器9.9元/月的活动,准备先搭建一个博客网站,写写自已的心得以及经验.之前也搭建过网站,最后由于个人没时间(没时间是假的,就是懒.哈哈)的原因导致最后服务器 ...

  6. 国行Android手机使用google全套GMS服务小结

        由于众所周知的原因,国行手机是不能内置google服务的,但作为铁杆google粉,没有GMS的Android不是完整的Android,NEXUS系列机器又由于各种原因买不到或者不想选购,那么 ...

  7. [React] Controlling Form Values with React

    In this lesson we'll talk about controlling the value for inputs, textareas, and select elements. We ...

  8. 云计算时代告别phpMyAdmin

    云计算时代告别phpMyAdmin phpMyAdmin是一款很经典的MySQL数据库管理工具,在云计算快速发展的今天,phpMyAdmin交互老旧.已经不能适应时代步伐.因此有很多人開始选择一些更高 ...

  9. 手动脱FSG壳实战

    作者:Fly2015 对于FSG壳.之前没有接触过是第一次接触.这次拿来脱壳的程序仍然是吾爱破解论坛破解培训的作业3的程序.对于这个壳折腾了一会儿,后来还是被搞定了. 1.查壳 首先对该程序(吾爱破解 ...

  10. UML类图中的几种关系总结

           UML类图,描写叙述对象和类之间相互关系的方式包含:依赖(Dependency).关联(Association).聚合(Aggregation).组合(Composition).泛化(G ...