drf认证组件、权限组件、jwt认证、签发、jwt框架使用

yizhihongxing

DRF认证组件、权限组件、JWT认证、签发、JWT框架使用

简介

DRF(Django REST framework)是基于 Django 开发的一套 RESTful 框架,该框架提供了丰富的功能和工具,例如认证、Pagination、Serializers、ViewSets等等。其中,认证和权限组件是使用DRF的关键内容,可以定义用户身份验证方式和对不同用户进行权限控制。JWT认证和签发是在DRF实现认证的过程中经常用到的技术,JWT框架则是一种方便使用JWT技术的库。

DRF认证组件

DRF认证组件可以通过rest_framework.authentication模块来使用,可以使用以下几个组件:

  • TokenAuthentication:基于Token的认证方式,需要在请求头或url中附带Token进行验证。
  • SessionAuthentication:基于Session的认证方式,需要通过浏览器来与服务器进行会话。
  • BasicAuthentication:基于HTTP Basic Authentication协议的认证方式,在请求头中添加用户名和密码,然后以base64加密。
  • OAuth2Authentication:基于OAuth2.0的认证方式,需要进行OAuth2授权验证,然后通过OAuth2 Token来获取资源。

要使用这些认证组件可以在setting.py文件中添加配置,如:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework.authentication.SessionAuthentication',
        'rest_framework.authentication.BasicAuthentication',
        'oauth2_provider.contrib.rest_framework.OAuth2Authentication',
    ]
}

DRF权限组件

DRF权限组件可以通过rest_framework.permissions模块来使用,可以使用以下几个组件:

  • AllowAny:允许任何用户访问,无需认证。
  • IsAuthenticated:只允许已认证过的用户访问资源。
  • IsAdminUser:只允许管理员用户访问资源。
  • IsAuthenticatedOrReadOnly:允许已认证过的用户进行任何请求(GET, POST, PUT, DELETE),未认证的用户只可进行GET请求。

要使用这些权限组件可以在view.py文件中添加权限类,如:

from rest_framework.permissions import IsAuthenticated
from rest_framework.views import APIView

class ExampleView(APIView):
    permission_classes = [IsAuthenticated]
    def get(self, request):
        return Response('Only authenticated users can access this resource.')

JWT认证

JWT认证是一种无状态的认证方式,JWT(JSON Web Token)是一种安全的分布式认证机制。JWT由三部分组成:Header(头部)、Payload(载荷)和Signature(签名)。其中Header声明了token类型和签名算法,Payload包含了用户的信息和其他数据,Signature用来验证token是否有效。

使用JWT认证需要安装pyjwt库,之后在settings.py文件中添加以下配置:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ]
}

JWT签发

JWT签发是指将用户的信息和一些其他数据组成Payload,然后使用Header,Payload和Secret Key来签发Token。以下是一个使用JWT签发的例子:

import jwt
from datetime import datetime, timedelta
from django.conf import settings

def create_jwt(user_id):
    exp_time = datetime.utcnow() + timedelta(hours=settings.JWT_EXPIRATION_HOURS)
    payload = {
        'user_id': user_id,
        'exp': exp_time
    }
    token = jwt.encode(payload, settings.JWT_SECRET_KEY, algorithm=settings.JWT_ALGORITHM).decode('utf-8')
    return token

上面的例子中,create_jwt函数使用pyjwt库来生成JWT Token,其中包含了用户ID和过期时间等信息。关键的密钥和算法信息在settings.py文件中设置。

JWT框架使用

使用JWT框架可以简化JWT的使用过程。常用的JWT框架有Django JWTPyJWT。以下是一个使用Django JWT的例子:

from django.contrib.auth import authenticate
from rest_framework_jwt.settings import api_settings

def obtain_jwt_token(username, password):
    user = authenticate(username=username, password=password)
    if user is not None:
        payload = api_settings.JWT_PAYLOAD_HANDLER(user)
        token = api_settings.JWT_ENCODE_HANDLER(payload)
        return token.decode('utf-8')
    else:
        return None

上面的例子中,obtain_jwt_token函数使用Django JWT来生成JWT Token,其中包含了用户ID和过期时间等信息。函数首先通过authenticate函数进行用户认证,然后使用Django JWT的JWT_PAYLOAD_HANDLERJWT_ENCODE_HANDLER生成Token。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:drf认证组件、权限组件、jwt认证、签发、jwt框架使用 - Python技术站

(0)
上一篇 2023年3月28日
下一篇 2023年3月28日

相关文章

  • vue监听scroll的坑的解决方法

    标题:Vue监听scroll的坑的解决方法 问题背景 在Vue的开发中,经常需要监听scroll事件以实现一些滚动相关的交互效果。但是,在使用Vue绑定scroll事件时,会出现一些坑。 问题描述 在Vue中通过v-on指令绑定scroll事件之后,发现绑定的函数并没有被触发,示例代码如下: <template> <div class=&q…

    other 2023年6月27日
    00
  • Java中双向链表详解及实例

    Java中双向链表详解及实例 什么是双向链表? 双向链表是一种经典的线性数据结构,它不仅能够支持插入、删除操作,而且还能够支持在链表中任何位置进行查找操作。 双向链表的每个节点都有两个指针,分别是指向前驱节点和后继节点的指针,这样就可以通过前向和后向遍历节点,从而实现各种操作。 双向链表的定义 下面是Java语言中双向链表的定义: class Node { …

    other 2023年6月27日
    00
  • win10家庭中文版没有本地用户和组怎么办

    win10家庭中文版没有本地用户和组怎么办 在 Windows 10 家庭中文版中,由于系统限制,无法像专业版和企业版那样管理本地用户和组。但是,我们仍然可以利用以下三种方法来解决这个问题。 方法一:使用Windows 10 家庭中文版的默认用户和组 Windows 10 家庭中文版自带了一些默认用户和组,我们可以利用这些默认账户来管理系统。通过在“计算机管…

    其他 2023年3月28日
    00
  • photoshop新版cc2016有那些好用的新功能

    Photoshop CC 2016是Adobe公司推出的一款图像处理软件,它在原有功能的基础上增加了一些新的功能,以下是其中一些好用的新功能: 面板自动隐藏 在Photoshop CC 2016中,可以通过单击面板选项卡上的箭头来自动隐藏面板,这样可以最大化工作区域,提高工作效率。当需要使用面板时,只需将鼠标移动到面板选项卡上即可。 示例说明:在使用Phot…

    other 2023年5月7日
    00
  • 学习pyparsing

    pyparsing是Python中的一个解析库,用于解析和分析文本数据。它提供了一种简单而强大的方式来定义和解析复杂的文本语法。下面是学习pyparsing的详细攻略,包括安装、基本概念、示例等。 安装 使用pip命令可以方便地安装pyparsing库: pip install pyparsing 基本概念 pyparsing库中的两个基本概念是Parser…

    other 2023年5月7日
    00
  • jenkins忘记管理员账户密码如何解决?

    Jenkins忘记管理员账户密码如何解决? Jenkins是一个流行的开源自动化工具,它支持持续集成和持续交付管道。管理员账户是Jenkins的最高权限账户,可以管理系统的设置和配置等。但有时候,管理员会忘记他们的密码,这会成为管理员访问Jenkins的一个问题。在本文中,我们将讨论管理员忘记密码的情况,并提供解决方案。 解决管理员忘记密码的方法 方法一:使…

    其他 2023年3月28日
    00
  • iOS 项目中的version和build 详解

    iOS 项目中的 version 和 build 详解 在 iOS 项目中,version 和 build 是两个重要的概念,用于标识和管理应用程序的不同版本。它们在应用程序的发布、更新和识别方面起着关键作用。下面将详细解释这两个概念以及它们的区别。 Version(版本号) Version 是一个用于标识应用程序版本的字符串。它通常采用 x.y.z 的格式…

    other 2023年8月3日
    00
  • 备用DNS服务器ip地址8.8.8.8

    备用DNS服务器攻略 备用DNS服务器是用于解析域名的服务器,当主DNS服务器无法正常工作时,备用DNS服务器可以提供备用的解析服务。其中,备用DNS服务器IP地址8.8.8.8是由Google提供的公共DNS服务器。下面是详细的攻略,包含两个示例说明。 步骤一:配置备用DNS服务器 打开计算机的网络设置界面。 找到当前使用的网络连接,点击进入其详细设置。 …

    other 2023年7月30日
    00
合作推广
合作推广
分享本页
返回顶部