首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

如何添加认证中间件JWT django?

在Django项目中添加JSON Web Token(JWT)认证中间件通常涉及以下步骤:

基础概念

JWT是一种开放标准(RFC 7519),用于在网络应用环境间安全地传输信息作为JSON对象。它通常用于身份验证和信息交换。

相关优势

  1. 无状态:服务器不需要保存会话信息,减轻了服务器的负担。
  2. 安全性:通过加密确保数据的安全传输。
  3. 跨域支持:JWT天然支持跨域请求。

类型

  • 访问令牌(Access Token):用于访问资源。
  • 刷新令牌(Refresh Token):用于获取新的访问令牌。

应用场景

  • API认证:保护RESTful API。
  • 单页应用(SPA):如React或Vue.js应用中的用户认证。

实现步骤

安装依赖

首先,你需要安装djangorestframeworkdjangorestframework-simplejwt库。

代码语言:txt
复制
pip install djangorestframework djangorestframework-simplejwt

配置Django设置

settings.py文件中进行以下配置:

代码语言:txt
复制
INSTALLED_APPS = [
    ...
    'rest_framework',
]

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
}

from datetime import timedelta

SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
    'ROTATE_REFRESH_TOKENS': False,
    'BLACKLIST_AFTER_ROTATION': True,
    ...
}

创建认证视图

在你的应用中创建视图来处理登录和刷新令牌的逻辑。

代码语言:txt
复制
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
from django.urls import path

urlpatterns = [
    ...
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]

使用中间件

如果你需要自定义中间件来处理JWT,可以创建一个新的中间件文件,例如middleware.py

代码语言:txt
复制
from rest_framework_simplejwt.authentication import JWTAuthentication
from rest_framework.exceptions import AuthenticationFailed

class CustomJWTAuthentication(JWTAuthentication):
    def authenticate(self, request):
        try:
            return super().authenticate(request)
        except AuthenticationFailed:
            # 自定义错误处理逻辑
            pass

然后在settings.py中添加这个中间件:

代码语言:txt
复制
MIDDLEWARE = [
    ...
    'yourapp.middleware.CustomJWTAuthentication',
]

遇到的问题及解决方法

问题:Token过期

原因:访问令牌有固定的生命周期,过期后需要刷新。

解决方法:确保客户端在令牌过期前使用刷新令牌获取新的访问令牌。

问题:无效的Token

原因:可能是Token被篡改或无效。

解决方法:检查Token的签名是否正确,并确保Token未被列入黑名单。

问题:跨域请求失败

原因:浏览器的同源策略限制。

解决方法:配置CORS(跨源资源共享)策略,允许特定的源访问你的API。

代码语言:txt
复制
INSTALLED_APPS = [
    ...
    'corsheaders',
]

MIDDLEWARE = [
    ...
    'corsheaders.middleware.CorsMiddleware',
]

CORS_ORIGIN_ALLOW_ALL = True  # 或者指定允许的源

通过以上步骤,你可以在Django项目中成功添加JWT认证中间件,并处理常见的认证问题。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Django+JWT实现Token认证

,这里不细说,只讲下Django如何利用JWT实现对API的认证鉴权,搜了几乎所有的文章都是说JWT如何结合DRF使用的,如果你的项目没有用到DRF框架,也不想仅仅为了鉴权API就引入庞大复杂的DRF框架...项目用了Django默认的权限系统,既能对账号密码登录的进行权限校验,又能对基于JWT的请求进行权限校验 PyJWT介绍 要实现上边的需求1,我们首先得引入JWT模块,python下有现成的PyJWT模块可以直接用...': '运维咖啡吧', 'site': 'https://ops-coffee.cn'} Django案例 Django要兼容session认证的方式,还需要同时支持JWT,并且两种验证需要共用同一套权限系统...,该如何处理呢?...检查用户的认证模式,同时认证完成后验证用户是否有权限操作 于是一个auth_permission_required的装饰器产生了: from django.conf import settings from

2.8K20

Django rest-framework的jwt认证

jwt认证 jwt 是json web token的缩写,是一种登录认证的认证方式 jwt认证和普通session认证的区别 session需要保存至服务端数据库中,而jwt服务器不需要存储token...认证组成 jwt 由 头.载荷.签名 三部分组成,中间由 .拼接而成 每部分都是一个json字典,头和载荷采用base64可逆加密算法加密,签名采用HS256不可逆加密算法算法 jwt认证组成介绍: jwt...校验用户对象 以上算法都通过后,载荷校验得到的User对象,就是该token代表的登录用户(django中一般把登录用户存放在request.user中) jwt的刷新算法 刷新算法就是在前发完token...后,在token的有效时间内,用户每次提交请求时都会刷新该token的有效时间 刷新算法的实现: 要在签发token的载荷中,额外添加两个时间信息:第一次签发token的时间,最多往后刷新的有效时间 每次请求携带...客户端存储token,服务器只存储签发与校验的算法,代码执行效率高 签发与校验算法在多个服务器上统一,在jwt规则下服务器做集群非常便捷 DRF中的jwt认证 安装 pip3 install djangorestframework-jwt

1.1K10
  • 如何在Django中集成JWT

    JWT简介 JWT(JSON Web Token)是一种流行的跨域认证解决方案。它可以在令牌中安全地传输用户身份信息,实现无状态认证机制。...通过这种方式,JWT可以将用户信息安全地在客户端和服务端传递。 在Django中使用JWT JWT在Django有多种第三方包可以实现,我这里选择使用比较常用的simplejwt. 1....添加认证接口 我们需要为获取tokens的视图配置URLs。...这些视图已经被 djangorestframework_simplejwt 提供了,我们只需将其添加到urls.py文件即可: from django.urls import path from rest_framework_simplejwt.views...至此,我们了解了如何在Django REST框架中集成JWT认证,实现基于token的API接口访问控制。JWT可以提供更强大的用户认证方案。

    12410

    如何通过 JWT 来解决登录认证问题

    服务器对账号和密码进行验证,验证通过就生成一个令牌,并返回给客户端,客户端收到令牌之后,把令牌存储起来,之后再发起其他请求就带着令牌,处理请求的服务器校验令牌是否有效即可 引入令牌之后就解决了集群环境下的认证问题...JWT 的介绍 官网:JSON Web Tokens - jwt.io JWT 令牌本身是一个字符串,包括头部,载荷,签名三部分,将信息作为 JSON 对象进行传输 头部:包括令牌的类型和使用的哈希算法...载荷:存储的有效信息,为自定义内容 签名:用于防止 JWT 内容被篡改(并不是防止被解析),只要被篡改,令牌就会失效 3....JWT 的使用 首先需要导入对应的依赖: io.jsonwebtoken jjwt-api</artifactId...StringUtils.hasLength(token)) { return null; } //JWT解析器 JwtParser

    10110

    Django搭建博客(六):为后台添加用户认证机制

    一、auth模块 Django有一套自带的身份认证模块,可以通过 from django.contrib import auth引入。...在添加身份认证功能之前,我们先来了解一下 auth模块的工作原理。 假设我们现在有一个登录页面,在这个页面里可以输入账号和密码来进行登录。...当我们判断一个账号可以登录时,调用 auth.login将该账户添加到已登录的列表里。...然后对于需要登录的页面,我们只需要在视图函数上加上auth.decorators.login_required修饰器即可 二、为博客后台添加身份认证 前面我们简单讲了一下如何使用 Django的 auth...首先我们先添加登录和登出的链接和视图函数: from django.urls import re_path from . import views urlpatterns = [ ... .

    70420

    Django项目如何接入公司LDAP帐号认证

    一、前言 Django项目开发过程中,为了保证安全性,通常都会接入用户帐号认证权限功能,而标题中LDAP是什么呢?...当然这个不是本文介绍的重点,简单来说,LDAP是一种目录管理协议,通常公司用于存储员工的计算机登录帐号密码信息用的,而如果Django项目接入LDAP后,相当于登录Django站点时,可以不用再额外为使用该站点的用户去重新注册添加用户...文件,增加ldap配置如下: ##ldap认证接入 AUTH_LDAP_SERVER_URI = 'ldap://ip:port' #ldap服务地址、端口 # AUTH_LDAP_BIND_DN =...', # ldap认证 'UserManage.auth.UsernamePasswordAuth', ## 本地自定义model的认证方式 ) 注意事项: 1、实际接入ldap中,最关键的几个参数,...若LDAP验证通过,会检查django数据库中是否已存在该帐号,若不存在,则会根据LDAP验证通过后获取的用户信息,来创建django数据库的用户账号。

    3.2K10

    ABP VNext添加全局认证(如何继承AuthorizeFilter)

    前言 目前公司采用的开发框架是ABP VNext微服务框架 最近突然发现一个问题,ABP中如果控制器或服务层没有加 Authorize特性的话,则不会走身份认证,且不会认证Token 如图: 但是项目已开发大半...,一个个去补Authorize特性,工作量比较大,也容易产生遗漏 就想着以前做单体应用的时候,有个全局添加特性的方法,也就是如下代码: Services.AddMvc(setupAction => {...我们都知道,ABP提供了服务间的动态API通讯功能,它的原理是先获取对应服务的描述,然后通过描述来访问对应的服务节点, 也就是 api/abp/api-definition 这个描述JSON 我们用以上的代码添加了全局授权之后会发现...api-definition也被权限管控了,由于api-definition是由ABP框架自动生成的,我们也无法在这个终结点上添加类似  AllowAnonymous 的过滤特性 正文 那么应该如何解决这个问题呢...后来想到,可以继承AuthorizeFilter ,添加我们想要的过滤之后直接执行父类的方法,说干就干,我们继承AuthorizeFilter ,代码实现如下: public class AbpAuthorizeFilter

    45420

    美多商城前三天重点内容大盘点

    美多商城前三天重点内容大盘点 文章导航 1.自定义Django认证系统用户模型类 2.跨域请求 3.celery异步任务发短信 4.JWT认证机制 5.自定义jwt扩展登录视图响应数据函数 6.自定义Django...认证后端类(登录账户支持用户名和手机号) 7.QQ登录开发流程(流程图,可以自己画一下) 1.自定义Django认证系统用户模型类 1.1Django自带模型类介绍 Django中其实提供了用户模型类User...的认证系统所识别,需要在配置文件中告知Django认证系统使用我们自定义的模型类。...2.1使用 安装 pip install django-cors-headers 添加应用 INSTALLED_APPS = (    ...    ...Django认证后端类(登录账户支持用户名和手机号) 1. obtain_jwt_token登录视图中没有自己实现账户名和密码校验的代码,而是调用了Django认证系统中一个函数进行账户和密码的校验。

    79220

    Django中中间件学习之如何使用自定义中间件

    这就是中间件的牛逼之处!!! 中间件 现在你看这个图可能有点迷,等你给本篇文看完之后再看这个图会感觉真牛逼哈哈!...django 中的中间件(middleware),在django中,中间件其实就是一个类,在请求到来和结束后,django会根据自己的规则在合适的时机执行中间件中相应的方法。...在django项目的settings文件中,有一个 MIDDLEWARE_CLASSES 变量,其中每一个元素就是一个中间件。...(1)中间件的执行顺序: **请求以自上而下的顺序通过所有的层,view视图函数处理之后,响应以自下而上的顺序通过所有的层,期间经过的每个中间件都会对请求或者响应进行处理。...注册中间件: 将自定义的中间件类MyException注册到settings.py中间件中: mucis是项目名,先找到文件所在的位置,把自定义的中间件的类添加到MIDLEWARE的列表当中!

    55800

    Django认证系统并不鸡肋反而很重要

    django.contrib.contenttypes:用于关联权限和models,从而赋予models的添加/删除等权限。 contrib翻译为普通发布版。...在MIDDLEWARE可以看到: SessionMiddleware:session中间件。 AuthenticationMiddleware:认证中间件。...我点开了源码,发现除了Django的认证后端,DRF已经封装了Session、Token、JWT的认证: image.png 权限管理 权限一般分为add、change、delete、view,也就是增删改查...小结 本文介绍了Django自带的基于session的认证系统,阐述了用户、组、认证与授权的相关概念,以及session认证的技术细节,最后讲解了如何快速上手体验的操作步骤。...虽然如今基于session认证用的很少了,但它却是理解Token、JWT认证的基础,仍然值得我们学习。

    1.1K10

    【云+社区年度征文】Django认证系统并不鸡肋反而很重要

    django.contrib.contenttypes:用于关联权限和models,从而赋予models的添加/删除等权限。 contrib翻译为普通发布版。...在MIDDLEWARE可以看到: SessionMiddleware:session中间件。 AuthenticationMiddleware:认证中间件。...我点开了源码,发现除了Django的认证后端,DRF已经封装了Session、Token、JWT的认证: [image-20201210125001757.png] 权限管理 权限一般分为add、change...小结 本文介绍了Django自带的基于session的认证系统,阐述了用户、组、认证与授权的相关概念,以及session认证的技术细节,最后讲解了如何快速上手体验的操作步骤。...虽然如今基于session认证用的很少了,但它却是理解Token、JWT认证的基础,仍然值得我们学习。

    1.6K70

    3.寻光集后台管理系统-依赖环境准备

    第三方库 django REST framework https://www.django-rest-framework.org/ 本次开发使用的是前后端分离的方式开发,所以后端使用django REST...极丰富的类视图,Mixin扩展视图,ViewSet视图 提供了直观的web api界面 支持多种身份认证和权限认证 强大的排序,过滤,分页,搜索,限流等功能。...扩展性强, 插件丰富 django-excel http://django.pyexcel.org/zh/latest/index.html 需求中需要将数据导出excel来进行查看,所以使用django-excel...', 'django_filters', 'corsheaders', 'drf_yasg', ] 增加中间件 新增跨域请求的中间件 "corsheaders.middleware.CorsMiddleware...' ], # 异常处理 'EXCEPTION_HANDLER': 'utils.exception.exception_handler' } 新增JWT配置 # JWT配置 SIMPLE_JWT

    40550
    领券