Python Django中基于djangorestframework-jwt的JWT认证实现详解
本文详细解析在Python Django项目中如何使用djangorestframework-jwt库实现JWT认证机制。内容涵盖JWT优缺点分析、库的安装配置、后端登录接口开发、自定义认证成功返回数据以及settings.py中的关键参数设置,帮助开发者快速搭建安全高效的分布式认证系统。
JWT优缺点分析
首先分析JWT(JSON Web Token)的核心优缺点。
JWT的主要优势在于其轻量级和无状态特性。
第一,它极大地简化了分布式系统中的单点登录(SSO)实现过程。
第二,由于JWT数据存储在客户端,服务端无需在数据库中保存会话信息,从而有效分担了数据库或服务器的存储压力。
然而,JWT也存在一些明显的局限性。
第一,数据存储在客户端意味着服务端仅验证JWT本身,无法直接识别或控制具体的客户端状态。第二,虽然可以设置JWT的过期时间,但由于数据存储在客户端,一旦签发,服务端难以主动调整或撤销其有效期,这给过期时间的动态管理带来了一定困难。
JWT库安装与配置
接下来介绍JWT库的安装步骤。
使用pip命令安装djangorestframework-jwt库,指定豆瓣镜像源以加速下载:pip install djangorestframework-jwt -i https://pypi.douban.com/simple
安装完成后,需要在settings.dev配置文件中添加相关配置。
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.BasicAuthentication',
),
}
import datetime
JWT_AUTH = {
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1), ##设置token的有效值
}
JWT生成与接口实现
随后演示如何手动生成JWT Token。
from rest_framework_jwt.settings import api_settings
jwt_payload_handler = api_settings.JWT_PAYLOAD_HANDLER
jwt_encode_handler = api_settings.JWT_ENCODE_HANDLER
payload = jwt_payload_handler(user)
token = jwt_encode_handler(payload)
然后在子应用的路由文件urls.py中实现后端登录认证接口。
from rest_framework_jwt.views import obtain_jwt_token
urlpatterns = [
path(r'login/', obtain_jwt_token), ##提供接口
]
自定义返回数据与最终配置
此外,还可以自定义JWT认证成功后的返回数据结构。
def jwt_response_payload_handler(token, user=None, request=None):
"""
自定义jwt认证成功返回数据
"""
return {
'token': token,
'id': user.id,
'username': user.username
}#这个是自定义jwt认证成功返回数据,一般会放在子应用下utils文件中,然后在settings中配置,将路径告诉django
最后,修改settings.dev配置文件以应用上述自定义处理逻辑。
# JWT
JWT_AUTH = {
'JWT_EXPIRATION_DELTA': datetime.timedelta(days=1),
'JWT_RESPONSE_PAYLOAD_HANDLER': 'user.utils.jwt_response_payload_handler',
}
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持本站。
本站声明
本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。













