Django

⌘K
  1. Home
  2. Django
  3. library
  4. Djoser
  5. 6. JWT Authentication (JSON Web Token)

6. JWT Authentication (JSON Web Token)

Django এবং Django REST Framework (DRF) প্রজেক্টে JWT (JSON Web Token) Authentication সেটআপ করা এবং ব্যবহারের পদ্ধতি নিয়ে বিশদ ব্যাখ্যা নিচে দেওয়া হলো।

১. JWT ইনস্টল করা ও কনফিগার করা

Django প্রজেক্টে JWT authentication সেটআপ করার জন্য প্রথমে djangorestframework-simplejwt প্যাকেজটি ইনস্টল করতে হবে।

ইনস্টলেশন কমান্ড:

pip install djangorestframework-simplejwt

Settings.py কনফিগারেশন: REST_FRAMEWORK সেকশনে JWTAuthentication ক্লাস যুক্ত করতে হবে।

INSTALLED_APPS = [
    ...,
    'rest_framework',
    'rest_framework_simplejwt',
]

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

Simple JWT কনফিগারেশন (ঐচ্ছিক):

from datetime import timedelta

SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
    'ROTATE_REFRESH_TOKENS': True,
    'BLACKLIST_AFTER_ROTATION': True,
    'ALGORITHM': 'HS256',
    'SIGNING_KEY': 'your_secret_key',
    'AUTH_HEADER_TYPES': ('Bearer',),
}

২. JWT Login ও Token Refresh: লগইন এবং রিফ্রেশ টোকেন ব্যবহারের পদ্ধতি

JWT authentication সিস্টেমে, user-কে login করার জন্য একটি access token এবং একটি refresh token সরবরাহ করা হয়। access token একটি নির্দিষ্ট সময় পর্যন্ত বৈধ থাকে, এবং refresh token ব্যবহার করে একটি নতুন access token জেনারেট করা যায়।

Login Endpoint:

POST /api/token/

JSON ডেটা উদাহরণ (Login রিকোয়েস্ট):

{
    "username": "user1",
    "password": "securepassword"
}

Response (সফল হলে):

{
    "access": "your_access_token_here",
    "refresh": "your_refresh_token_here"
}

Token Refresh Endpoint:

POST /api/token/refresh/

JSON ডেটা উদাহরণ (Refresh রিকোয়েস্ট):

{
    "refresh": "your_refresh_token_here"
}

Response (সফল হলে):

{
    "access": "new_access_token_here"
}

৩. Custom JWT Authentication: কাস্টম ফিল্ডস ব্যবহার করে JWT অথেন্টিকেশন সিস্টেম তৈরি

JWT অথেন্টিকেশন সিস্টেমকে কাস্টমাইজ করে অতিরিক্ত ফিল্ডস যুক্ত করা যেতে পারে। এর জন্য, আপনাকে একটি কাস্টম TokenObtainPairSerializer তৈরি করতে হবে।

Custom Serializer তৈরি করা:

from rest_framework_simplejwt.serializers import TokenObtainPairSerializer

class CustomTokenObtainPairSerializer(TokenObtainPairSerializer):
    @classmethod
    def get_token(cls, user):
        token = super().get_token(user)

        # Custom claims যোগ করা হচ্ছে
        token['username'] = user.username
        token['email'] = user.email
        token['is_staff'] = user.is_staff
        
        return token

Custom View তৈরি করা:

from rest_framework_simplejwt.views import TokenObtainPairView
from .serializers import CustomTokenObtainPairSerializer

class CustomTokenObtainPairView(TokenObtainPairView):
    serializer_class = CustomTokenObtainPairSerializer

Urls.py কনফিগারেশন:

from django.urls import path
from .views import CustomTokenObtainPairView
from rest_framework_simplejwt.views import TokenRefreshView

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

Custom JWT Validation

কোনো protected API endpoint এ token validate করার জন্য IsAuthenticated permission এবং JWTAuthentication ব্যবহৃত হয়।

Example API View:

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated

class ProtectedView(APIView):
    permission_classes = [IsAuthenticated]

    def get(self, request):
        return Response({"message": "This is a secured response for authenticated users."})

Authorization Header: API রিকোয়েস্টে access token পাঠানোর সময়, Authorization header ব্যবহার করতে হবে:

Authorization: Bearer your_access_token_here

সংক্ষেপে

  • ইনস্টল ও কনফিগারেশন: djangorestframework-simplejwt প্যাকেজ ইন্সটল ও কনফিগার করা।
  • Login ও Refresh: User login এ access এবং refresh token প্রদান করা।
  • Custom JWT: অতিরিক্ত ফিল্ডস সহ JWT কাস্টমাইজ করা।
  • Validation: Protected endpoint এ token validate করা।

এভাবে, Django এবং DRF ব্যবহার করে JWT authentication সহজেই সেটআপ ও ব্যবহার করা যায়।

How can we help?