使用Simple-JWT通过JWT认证保护Django REST API的项目示例
推荐超级课程:
@TOC
在Django Rest Framework (DRF)中使用Simple-JWT的JWT (JSON Web Tokens)认证是保护API的流行选择。Simple-JWT是一个为Django应用程序提供直接JWT认证的库。让我们逐步介绍如何在Django Rest Framework中使用Simple-JWT设置JWT认证,包括一个真实项目示例。
步骤1:安装所需包
安装Django、Django Rest Framework和Simple-JWT:
pip install django djangorestframework djangorestframework_simplejwt
步骤2:设置Django项目
如果你还没有创建,请创建一个新的Django项目:
django-admin startproject <myproject>
cd myproject
将<myproject>
替换为你项目的所需名称。这个命令将生成一个包含指定项目名称的新目录,其中包含你项目所需的文件和目录。我们的项目可能如下所示:
myproject/
├─── myproject/
| ├── __init__.py
| ├── settings.py
| ├── urls.py
| ├── wsgi.py
| └── asgi.py
└─── manage.py
步骤3:设置Django应用
在项目中创建一个新的Django应用:
python manage.py startapp <myapp>
将<myapp>
替换为你应用的所需名称。创建应用后,我们的项目可能如下所示:
myproject/
├── myproject/
| ├── __init__.py
| ├── settings.py
| ├── urls.py
| ├── wsgi.py
| └── asgi.py
├── myapp/
│ ├── __init__.py
│ ├── admin.py
│ ├── apps.py
│ ├── migrations/
│ │ └── __init__.py
│ ├── models.py
│ ├── tests.py
│ ├── urls.py
│ └── views.py
└── manage.py
步骤 4:配置 Django Rest Framework
在项目的 settings.py 文件中的 INSTALLED_APPS
添加 ‘rest_framework’ 和 ‘rest_framework_simplejwt’:
INSTALLED_APPS = [
# 所有默认应用放在这里
'rest_framework',
'rest_framework_simplejwt',
'myapp', # 将 'myapp' 替换为你的应用名称
]
步骤 5:配置 JWT 设置
在你的 settings.py 文件中,配置 Simple-JWT 设置。以下是一个基本配置:
# settings.py
from datetime import timedelta # 在 settings.py 文件顶部导入这个库
# 在 settings.py 文件中的 INSTALLED_APPS 下面放置以下内容
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES': (
'rest_framework.permissions.IsAuthenticated',
),
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
),
}
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60),
'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
'SLIDING_TOKEN_LIFETIME': timedelta(days=30),
'SLIDING_TOKEN_REFRESH_LIFETIME_LATE_USER': timedelta(days=1),
'SLIDING_TOKEN_LIFETIME_LATE_USER': timedelta(days=30),
}
步骤 6:令牌端点
在项目的 urls.py 中包含 Simple-JWT 令牌端点:
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
from django.contrib import admin
from django.urls import path, include
urlpatterns = [
path('admin/', admin.site.urls),
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('', include('myapp.urls')), # 在这里包含你的应用 urls.py
]
步骤 7:创建 API 视图
在应用中的 myapp/views.py
创建你的 API 视图。这些是需要认证的端点。
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
from rest_framework_simplejwt.authentication import JWTAuthentication
class Home(APIView):
authentication_classes = [JWTAuthentication]
permission_classes = [IsAuthenticated]
def get(self, request):
content = {'message': 'Hello, World!'}
return Response(content)
步骤 8:URL 配置
首先在应用中创建 myapp/urls.py 文件。然后在应用中的 myapp/urls.py 配置你的 URL:
touch myapp/urls.py
from django.urls import path
from .views import Home
urlpatterns = [
path('', Home.as_view()),
]
步骤 9:运行迁移
最后,运行以下命令以应用你的应用的任何数据库迁移:
python manage.py migrate
步骤 10:测试
创建用于测试的超级用户并运行服务器,请执行以下命令:
python manage.py createsuperuser
python manage.py runserver
现在,您可以使用Postman等工具测试您的API端点。通过向(http://127.0.0.1:8000/api/token/ )发送POST请求并使用有效的用户凭据(如下截图所示)来获取访问令牌。
然后,使用此访问令牌向受认证的端点(如:http://127.0.0.1:8000/ )发送请求,类型需更改为Bearer Token。
步骤11:总结
您现在已经使用Simple-JWT在Django Rest Framework中设置了JWT认证。这为在您的Django API中认证用户和访问受保护资源提供了一种安全的方式。请确保在客户端应用程序中适当地处理令牌过期和刷新。
有关更多详细信息,您可以参考Django的simple-JWT 文档。