📜  使用 Django REST 框架进行 JWT 身份验证

📅  最后修改于: 2022-05-13 01:54:46.513000             🧑  作者: Mango

使用 Django REST 框架进行 JWT 身份验证

JSON Web Token 是一个开放标准,用于使用 JSON 对象在各方之间安全地传输数据。 JWT 用于用户和提供者的无状态身份验证机制,这意味着在客户端维护会话,而不是在服务器上存储会话。在这里,我们将在 Django 中实现 JWT 认证系统。

所需模块:
  • django : Django 安装
  • djangorestframework_simplejwt:
    pip install djangorestframework_simplejwt

基本设置:

通过以下命令启动项目 -

django-admin startproject config

将目录更改为项目配置 -

cd config

启动服务器 - 通过在终端中键入以下命令启动服务器 -

python manage.py runserver

要检查服务器是否正在运行,请转到 Web 浏览器并输入http://127.0.0.1:8000/作为 URL。

现在按下停止服务器

ctrl-c

让我们创建一个名为“app”的应用程序。

python manage.py startapp app

将配置添加到 settings.py 文件:

打开 config 文件夹中的 settings.py 文件并添加配置。

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
}

编辑 urls.py 文件
在配置文件夹中打开 urls.py

from django.urls import path, include
from rest_framework_simplejwt import views as jwt_views
  
urlpatterns = [
    path('api/token/',
         jwt_views.TokenObtainPairView.as_view(),
         name ='token_obtain_pair'),
    path('api/token/refresh/',
         jwt_views.TokenRefreshView.as_view(),
         name ='token_refresh'),
    path('', include('app.urls')),
]

编辑视图.py
在 app 文件夹中打开 views.py 并创建一个 API 视图

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated
  
  
class HelloView(APIView):
    permission_classes = (IsAuthenticated, )
  
    def get(self, request):
        content = {'message': 'Hello, GeeksforGeeks'}
        return Response(content)

编辑 urls.py
在 app 文件夹中创建一个 urls.py 并编辑它

from django.urls import path
from . import views
  
urlpatterns = [
    path('hello/', views.HelloView.as_view(), name ='hello'),
]

用法 :

为了发出 HTTP 请求,我们使用了 HTTPie 来安装它。

$ sudo apt install httpie

第1步 :
迁移项目,创建超级用户并运行服务器

$ python3 manage.py migrate
$ python manage.py createsuperuser
$ python manage.py runserver 4000

第2步 :
现在,我们需要进行身份验证并获取令牌。我们将在端点得到的是
/api/令牌/

$ http post http://127.0.0.1:4000/api/token/ username=spider password=vinayak

添加您的用户名和密码

第 3 步:
复制访问令牌并发出请求

$  http http://127.0.0.1:4000/hello/ "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNTg3Mjc5NDIxLCJqdGkiOiIzYWMwNDgzOTY3NjE0ZDgxYmFjMjBiMTBjMDlkMmYwOCIsInVzZXJfaWQiOjF9.qtNrUpyPQI8W2K2T22NhcgVZGFTyLN1UL7uqJ0KnF0Y"