如何在 Django Rest Framework 中开启 JWT 鉴权并配置过期时间?

文章导读
在 Django Rest Framework 中开启 JWT 鉴权最推荐安装 djangorestframework-simplejwt 库,并在 settings.py 的 REST_FRAMEWORK 中配置认证类。过期时间通过 SIMPLE_JWT 字典中的 ACCESS_TOKEN_LIFETIME 和 REFRESH_TOKEN_LIFETIME 设置,单位需使用 datetime.t
📋 目录
  1. 命令速用版
  2. 为什么会这样
  3. 分步处理
  4. 怎么验证是否生效
  5. 常见坑
  6. 常见问题
  7. 参考来源
A A

在 Django Rest Framework 中开启 JWT 鉴权最推荐安装 djangorestframework-simplejwt 库,并在 settings.py 的 REST_FRAMEWORK 中配置认证类。过期时间通过 SIMPLE_JWT 字典中的 ACCESS_TOKEN_LIFETIME 和 REFRESH_TOKEN_LIFETIME 设置,单位需使用 datetime.timedelta。

先说结论:使用 djangorestframework-simplejwt 是社区标准方案,配置集中在 settings.py 且支持灵活的生命周期管理。

  • 适合:新构建的 DRF 项目或需要无状态认证的场景。
  • 先准备:安装 djangorestframework-simplejwt 包并确认 Python 环境兼容。
  • 验收:使用过期 token 请求接口应返回 401 错误。

命令速用版

通过 pip 安装官方维护的 Simple JWT 库,这是目前 DRF 生态中最常用的 JWT 实现方案。

pip install djangorestframework-simplejwt

为什么会这样

Django Rest Framework 原生不包含 JWT 认证功能,需要依赖第三方库扩展。

DRF 设计为模块化框架,默认提供 Session 和 Basic 认证,JWT 属于无状态认证方案,需额外引入。配置过期时间是为了平衡安全性与用户体验,access token 较短可减少泄露风险,refresh token 较长可避免用户频繁登录。公开资料中没有看到可靠的量化数据表明特定过期时长的安全收益,通常依据业务敏感度设定。

分步处理

按以下顺序修改配置文件和路由,确保认证后端和令牌获取接口同时生效。

如何在 Django Rest Framework 中开启 JWT 鉴权并配置过期时间?

第一步:修改 settings.py 认证配置

在 REST_FRAMEWORK 字典中添加 JWTAuthentication 类,确保全局或指定视图启用 JWT。

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

第二步:配置令牌生命周期

在 settings.py 底部添加 SIMPLE_JWT 字典,使用 datetime.timedelta 设置时间跨度。

from datetime import timedelta\n\nSIMPLE_JWT = {\n    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),\n    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),\n    'ROTATE_REFRESH_TOKENS': True,\n    'BLACKLIST_AFTER_ROTATION': True,\n}

第三步:配置 urls.py 路由

如何在 Django Rest Framework 中开启 JWT 鉴权并配置过期时间?

引入官方提供的 Token 获取和刷新视图,暴露给前端调用。

from rest_framework_simplejwt.views import (\n    TokenObtainPairView,\n    TokenRefreshView,\n)\n\nurlpatterns = [\n    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),\n    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),\n]

怎么验证是否生效

通过发送携带 Token 的请求和故意发送过期 Token 来验证鉴权逻辑。

验证成功:使用获取到的 access token 访问受保护接口,HTTP 状态码应为 200。

验证过期:等待 ACCESS_TOKEN_LIFETIME 设置的时间后再次请求,或使用旧 token,HTTP 状态码应为 401 Unauthorized。

如何在 Django Rest Framework 中开启 JWT 鉴权并配置过期时间?

检查日志:查看 Django 运行日志,确认没有 AuthenticationFailed 以外的异常报错。

常见坑

配置过程中容易忽略时区设置和令牌刷新机制,导致验证失败或安全漏洞。

  • 时区不一致:服务器时间与客户端时间差异过大可能导致 token 立即失效,建议服务器统一使用 UTC 时间。
  • 刷新逻辑:默认配置下 refresh token 使用后可能轮换,前端需处理新 refresh token 的存储,否则会导致用户被迫重新登录。
  • 黑名单功能:Token 黑名单需要额外的数据库迁移支持,未执行 migrate 可能导致 Blacklist 相关功能报错。

常见问题

如何修改 Token 过期时间?

直接修改 settings.py 中 SIMPLE_JWT 字典下的 ACCESS_TOKEN_LIFETIME 值即可。

JWT 如何实现用户注销?

JWT 本身无状态无法强制失效,需开启 BLACKLIST_AFTER_ROTATION 并将 token 加入黑名单。

Access Token 和 Refresh Token 有什么区别?

Access Token 用于访问资源,寿命短;Refresh Token 用于获取新的 Access Token,寿命长。

参考来源

  • 名称:Django REST Framework Simple JWT
  • 标题:Settings - Django REST Framework Simple JWT documentation
  • URL:https://django-rest-framework-simplejwt.readthedocs.io/en/latest/settings.html