• django-rest-framework框架 第四篇 认证Authentication


    认证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 两个值

    续更 ...待续...

  • 相关阅读:
    Java1.4从BIO模型发展到NIO模型
    Java Socket TCP 套接字超时
    浅谈 Java Socket 构造函数参数 backlog
    Java Socket 的BIO模型(以TCP为例)
    TCP三次握手和四次挥手与Java Socket
    TCP报文格式
    Windows安装Wireshark实现127.0.0.1抓包
    NIO入门之多路复用选择器Selector
    晚安西南-----拆装死绳传感器
    晚安西南-----螺扶与拖压
  • 原文地址:https://www.cnblogs.com/zhichao123/p/10597267.html
Copyright © 2020-2023  润新知