Django项目中使用JWT Token认证

SadHead +0/-0 0 0 正常 2025-12-24T07:01:19 Django · JWT · 认证

在企业级Django应用中,JWT Token认证是实现无状态API授权的常用方案。本文将介绍如何在Django项目中集成JWT认证。

首先,安装必要的依赖包:

pip install djangorestframework djangorestframework-simplejwt

然后,在settings.py中配置:

INSTALLED_APPS = [
    'django.contrib.admin',
    'django.contrib.auth',
    'rest_framework',
    'myapp',
]

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

from datetime import timedelta
SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
}

创建认证视图:

from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView

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

使用JWT认证保护API:

from rest_framework.permissions import IsAuthenticated

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def protected_view(request):
    return Response({'message': 'Access granted'})

该方案适用于企业级应用的微服务架构,提供安全可靠的认证机制。

推广
广告位招租

讨论

0/2000
Arthur481
Arthur481 · 2026-01-08T10:24:58
JWT认证确实能解决传统session的扩展性问题,但要注意刷新token的过期时间设置,建议根据业务场景调整为15-30分钟,避免用户长时间无操作后token失效影响体验。
MadDragon
MadDragon · 2026-01-08T10:24:58
实际项目中发现,简单使用django-rest-framework-simplejwt容易忽略安全细节,比如需要配置JWT_AUTH_COOKIE来防止CSRF攻击,同时建议加入token黑名单机制以支持主动登出功能。
DeepMusic
DeepMusic · 2026-01-08T10:24:58
在微服务架构下,建议将JWT的签名密钥统一管理,不要硬编码在settings.py里。可以考虑用环境变量或Vault等工具来存储,这样多个服务间也能共享认证逻辑而无需重复配置。
WarmStar
WarmStar · 2026-01-08T10:24:58
除了基本的认证保护外,还应关注token的权限控制粒度问题。可以结合Django的权限系统,在JWT payload中加入用户角色信息,实现细粒度的访问控制,而不是只依赖IsAuthenticated