امن‌سازی APIهای Django REST با احراز هویت JWT با استفاده از Simple-JWT: یک راهنمای گام‌به‌گام همراه با پروژه عملی


۰


استفاده از JWT Authentication در Django REST Framework (DRF) با کتابخانه Simple-JWT یکی از روش‌های محبوب برای امن‌سازی APIها است. Simple-JWT یک کتابخانه‌ی ساده و کاربردی برای پیاده‌سازی احراز هویت JWT در اپلیکیشن‌های Django فراهم می‌کند. بیایید گام به گام نحوه‌ی راه‌اندازی JWT Authentication با Simple-JWT در DRF را مرور کنیم، همراه با یک مثال عملی.

گام ۱: نصب پکیج‌های لازم

ابتدا Django، Django REST Framework و Simple-JWT را نصب کنید:

1pip install django djangorestframework djangorestframework_simplejwt

گام ۲: ایجاد پروژه Django

اگر پروژه‌ای ندارید، یک پروژه جدید ایجاد کنید:

1django-admin startproject <myproject>
2cd myproject

جایگزین <myproject> نام دلخواه پروژه‌ی خود را قرار دهید. این دستور پوشه‌ای با آن نام ایجاد می‌کند که شامل فایل‌ها و دایرکتوری‌های پایه پروژه است. ساختار پروژه ممکن است اینگونه باشد:

1myproject/
2├── myproject/
3│   ├── __init__.py
4│   ├── settings.py
5│   ├── urls.py
6│   ├── wsgi.py
7│   └── asgi.py
8└── manage.py

گام ۳: ایجاد یک اپلیکیشن در پروژه Django

یک اپ جدید بسازید:

1python manage.py startapp <myapp>

جایگزین <myapp> نام دلخواه اپ خود را قرار دهید. اکنون ساختار پروژه شما ممکن است اینگونه شود:

1myproject/
2├── myproject/
3│   ├── __init__.py
4│   ├── settings.py
5│   ├── urls.py
6│   ├── wsgi.py
7│   └── asgi.py
8├── myapp/
9│   ├── __init__.py
10│   ├── admin.py
11│   ├── apps.py
12│   ├── migrations/
13│   │   └── __init__.py
14│   ├── models.py
15│   ├── tests.py
16│   ├── urls.py
17│   └── views.py
18└── manage.py

گام ۴: پیکربندی Django REST Framework

در فایل settings.py پروژه، نام‌های rest_framework و rest_framework_simplejwt را به INSTALLED_APPS اضافه کنید:

1INSTALLED_APPS = [
2    # سایر اپ‌های پیشفرض
3    
4    'rest_framework',
5    'rest_framework_simplejwt',
6    
7    'myapp',  # نام اپ خود را وارد کنید
8]

گام ۵: پیکربندی تنظیمات JWT

در همان فایل settings.py تنظیمات مربوط به Simple-JWT را اضافه کنید. کد پایه به شکل زیر است:

1# settings.py
2from datetime import timedelta  # در ابتدای فایل import کنید
3
4REST_FRAMEWORK = {
5    'DEFAULT_PERMISSION_CLASSES': (
6        'rest_framework.permissions.IsAuthenticated',
7    ),
8    'DEFAULT_AUTHENTICATION_CLASSES': (
9        'rest_framework_simplejwt.authentication.JWTAuthentication',
10    ),
11}
12
13SIMPLE_JWT = {
14    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60),
15    'SLIDING_TOKEN_REFRESH_LIFETIME': timedelta(days=1),
16    'SLIDING_TOKEN_LIFETIME': timedelta(days=30),
17    'SLIDING_TOKEN_REFRESH_LIFETIME_LATE_USER': timedelta(days=1),
18    'SLIDING_TOKEN_LIFETIME_LATE_USER': timedelta(days=30),
19}

گام ۶: تعریف آدرس‌های توکن

در urls.py پروژه، آدرس‌های مربوط به دریافت و رفرش توکن‌های JWT را اضافه کنید:

1from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
2from django.contrib import admin
3from django.urls import path, include
4
5urlpatterns = [
6    path('admin/', admin.site.urls),
7    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
8    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
9    path('', include('myapp.urls')),  # آدرس‌های اپ خود را وارد کنید
10]

گام ۷: ایجاد نماهای API

در myapp/views.py، نمای API که نیازمند احراز هویت است را تعریف کنید:

1from rest_framework.views import APIView
2from rest_framework.response import Response
3from rest_framework.permissions import IsAuthenticated
4from rest_framework_simplejwt.authentication import JWTAuthentication
5
6class Home(APIView):
7    authentication_classes = [JWTAuthentication]
8    permission_classes = [IsAuthenticated]
9
10    def get(self, request):
11        content = {'message': 'Hello, World!'}
12        return Response(content)

گام ۸: پیکربندی URLهای اپ

ابتدا یک فایل urls.py در پوشه myapp ایجاد کنید. سپس آدرس‌ها را در آن تعریف کنید:

1touch myapp/urls.py

محتوای فایل myapp/urls.py:

1from django.urls import path
2from .views import Home
3
4urlpatterns = [
5    path('', Home.as_view()),
6]

گام ۹: اجرای مایگریشن‌ها

برای اعمال تغییرات دیتابیس، دستور زیر را اجرا کنید:

1python manage.py migrate

گام ۱۰: تست کردن پروژه

یک سوپریوزر بسازید و سرور را اجرا کنید:

1python manage.py createsuperuser
2python manage.py runserver

اکنون می‌توانید با استفاده از ابزارهایی مانند Postman، API را تست کنید. برای دریافت توکن، به آدرس زیر درخواست POST بدهید (مثلاً آدرس لوکال):

1http://127.0.0.1:8000/api/token/

و اطلاعات معتبر کاربری (username و password) را ارسال کنید.

نمونه تصویری ارسال درخواست و دریافت Token:

سپس توکن دریافتی (access token) را در هدر درخواست‌ها به صورت Authorization با نوع Bearer Token به انتهای آدرس‌های احراز هویت شده اضافه کنید، مثلاً:

1http://127.0.0.1:8000/

نمونه تصویر تنظیم هدر Authorization در Postman:

گام ۱۱: جمع‌بندی

حالا شما احراز هویت JWT را در Django REST Framework با استفاده از Simple-JWT راه‌اندازی کرده‌اید. این روش یک مکانیزم امن برای تایید هویت کاربران و دسترسی به منابع محافظت‌شده در API را ارائه می‌دهد. فراموش نکنید مدیریت انقضا و رفرش توکن‌ها را در سمت کلاینت به‌درستی اجرا کنید.


برای جزئیات بیشتر می‌توانید مستندات رسمی Django Simple-JWT را مطالعه کنید: https://django-rest-framework-simplejwt.readthedocs.io/en/latest/

و همچنین این ریپازیتوری گیت‌هاب پروژه: GitHub - Django REST APIs با JWT Authentication


اگر نکته‌ای برای بهبود یا اصلاح دیدید خوشحال می‌شوم در بخش نظرات بشنوم.

اگر این مطلب برایتان مفید بود، لطفاً دکمه 👏 را بزنید تا دیگران هم استفاده کنند.

همچنین می‌توانید مرا در این پلتفرم‌ها دنبال کنید:

GitHub | daily.dev | LinkedIn | YouTube


منابع و مطالب بیشتر

Mehedi Khan

مطالب Django (۳۸ مقاله)

تصویر تصویر تصویر

Mehedi Khan

مطالب Python (۱۳ مقاله)

تصویر تصویر تصویر

چارچوب فریم جنگو
django-simple-jwt
django-rest-api
ای پی آی
django-jwt

۰


نظرات


author
نویسنده مقاله: امیرمهدی رستمی

کد با می متعهد است که بالاترین سطح کیفی آموزش را در اختیار شما بگذارد. هدف به اشتراک گذاشتن دانش فناوری اطلاعات و توسعه نرم افزار در بالاترین سطح ممکن برای درستیابی به جامعه ای توانمند و قدرتمند است. ما باور داریم هر کسی میتواند با استمرار در یادگیری برنامه نویسی چالش های خود و جهان پیرامون خود را بر طرف کند و به موفقیت های چشم گیر برسد. با ما در این مسیر همراه باشید. کد با می اجتماع حرفه ای برنامه نویسان ایرانی.

تمام حقوق این سایت متعلق به وبسایتcodebymeمیباشد.