Django WebSocket, JWT এবং Token Authentication: একটি পূর্ণাঙ্গ গাইড

Md Sadiqul Islam
3 min readFeb 2, 2025

বর্তমান ওয়েব অ্যাপ্লিকেশনগুলোর অন্যতম জনপ্রিয় ফিচার হচ্ছে রিয়েল-টাইম কমিউনিকেশন। Django-তে WebSocket ব্যবহারের মাধ্যমে আমরা রিয়েল-টাইম চ্যাট, লাইভ নোটিফিকেশন এবং অন্যান্য ইন্টারেক্টিভ ফিচার তৈরি করতে পারি। তবে, নিরাপত্তা নিশ্চিত করার জন্য JWT (JSON Web Token) Authentication এবং Token Authentication প্রয়োগ করা অত্যন্ত গুরুত্বপূর্ণ। এই নিবন্ধে আমরা Django-তে WebSocket, JWT এবং Token Authentication নিয়ে বিশদ আলোচনা করবো।

WebSocket কী?

WebSocket হলো একটি কমিউনিকেশন প্রটোকল যা ক্লায়েন্ট এবং সার্ভারের মধ্যে দ্বিমুখী সংযোগ (bidirectional connection) তৈরি করে। এটি HTTP-র তুলনায় দ্রুত এবং দক্ষ, কারণ এটি বারবার সংযোগ খুলতে বা বন্ধ করতে হয় না।

Django-তে WebSocket ব্যবহারের জন্য Django Channels লাইব্রেরি ব্যবহার করা হয়, যা Django-কে asynchronousreal-time কাজ করার ক্ষমতা প্রদান করে।

JWT এবং Token Authentication কেন গুরুত্বপূর্ণ?

JWT Authentication হলো একটি টোকেন-বেসড অথেনটিকেশন পদ্ধতি যা ব্যবহারকারীর পরিচয় নিশ্চিত করতে সাহায্য করে। এটি সাধারণত API অথেনটিকেশনের জন্য ব্যবহৃত হয়, তবে WebSocket-এর ক্ষেত্রেও এটি অত্যন্ত কার্যকরী।

Token Authentication হলো আরেকটি নিরাপদ অথেনটিকেশন পদ্ধতি, যা Django REST Framework (DRF) দ্বারা সহজেই বাস্তবায়ন করা যায়। এক্ষেত্রে, সার্ভার একটি Token প্রদান করে যা পরবর্তী অনুরোধগুলোর সাথে ব্যবহারকারীর পরিচয় যাচাই করতে ব্যবহৃত হয়।

WebSocket-এ JWT এবং Token Authentication বাস্তবায়ন

১. Django Project সেটআপ করুন

প্রথমে Django এবং Django Channels ইনস্টল করুন:

pip install django channels djangorestframework djangorestframework-simplejwt

তারপর settings.py-এ নিচের সেটিংস যুক্ত করুন:

INSTALLED_APPS = [
'daphne',
'channels',
'rest_framework',
'rest_framework.authtoken',
'rest_framework_simplejwt',
'myapp', # আপনার অ্যাপের নাম
]
ASGI_APPLICATION = 'myproject.asgi.application'

২. JWT এবং Token Token তৈরি করুন

Django REST Framework এবং Simple JWT ব্যবহার করে JWT token তৈরি করা যায়:

from rest_framework.authtoken.views import obtain_auth_token
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView
from django.urls import path
urlpatterns = [
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
path('api/token-auth/', obtain_auth_token, name='token_auth'),
]

ব্যবহারকারীরা /api/token/ এ গিয়ে লগইন করলে access token এবং refresh token পাবেন। /api/token-auth/ এ গেলে Token Authentication এর জন্য টোকেন পাবেন।

৩. WebSocket-এ JWT বা Token পাঠানোর সঠিক উপায়

WebSocket-এ Authorization header সরাসরি পাঠানো যায় না, তাই সাধারণত তিনভাবে JWT বা Token পাঠানো হয়:

  • Sec-WebSocket-Protocol Header-এ টোকেন পাঠানো (Best Practice)
  • Query Parameter-এ টোকেন পাঠানো (কম নিরাপদ)
  • প্রথম WebSocket মেসেজে টোকেন পাঠানো

৪. Custom JWT এবং Token Middleware তৈরি করুন

WebSocket কানেকশন গ্রহণের সময় টোকেন যাচাই করতে আমরা একটি custom authentication middleware তৈরি করবো:

from django.contrib.auth import get_user_model
from rest_framework_simplejwt.tokens import AccessToken
from rest_framework.authtoken.models import Token
from channels.middleware.base import BaseMiddleware
from asgiref.sync import sync_to_async
User = get_user_model()
class JWTTokenAuthMiddleware(BaseMiddleware):
async def __call__(self, scope, receive, send):
headers = dict(scope["headers"])
token = None
if b"sec-websocket-protocol" in headers:
protocols = headers[b"sec-websocket-protocol"].decode().split(", ")
for protocol in protocols:
if protocol.startswith("Bearer "):
token = protocol.split("Bearer ")[1]
break

# টোকেন যাচাই করুন
if token:
try:
# JWT Token যাচাই
access_token = AccessToken(token)
user = await sync_to_async(User.objects.get)(id=access_token["user_id"])
scope["user"] = user
except:
try:
# DRF Token যাচাই
user = await sync_to_async(User.objects.get)(auth_token=token)
scope["user"] = user
except:
scope["user"] = None # টোকেন ভুল হলে None
return await super().__call__(scope, receive, send)

৫. WebSocket Routing সেটআপ করুন

from django.urls import re_path
from channels.routing import ProtocolTypeRouter, URLRouter
from myapp.consumers import ChatConsumer
from myapp.middleware import JWTTokenAuthMiddleware
websocket_urlpatterns = [
re_path(r'ws/chat/$', ChatConsumer.as_asgi()),
]
application = ProtocolTypeRouter({
"websocket": JWTTokenAuthMiddleware(
URLRouter(websocket_urlpatterns)
),
})

৬. WebSocket Consumer তৈরি করুন

from channels.generic.websocket import AsyncWebsocketConsumer
import json
class ChatConsumer(AsyncWebsocketConsumer):
async def connect(self):
user = self.scope["user"]
if user and user.is_authenticated:
await self.accept()
await self.send(text_data=json.dumps({"message": f"Welcome, {user.email}!"}))
else:
await self.close()

৭. ফ্রন্টএন্ড থেকে WebSocket সংযোগ তৈরি করুন

const token = localStorage.getItem("access_token");
const socket = new WebSocket("ws://localhost:8000/ws/chat/", ["Bearer " + token]);
socket.onopen = () => console.log("Connected to WebSocket!");
socket.onmessage = (event) => console.log("Message received:", event.data);
socket.onerror = (error) => console.error("WebSocket Error:", error);

উপসংহার

এই গাইডে আমরা Django WebSocket, JWT এবং Token Authentication কিভাবে একত্রে কাজ করে তা বিশদভাবে দেখলাম। JWT এবং Token Middleware ব্যবহার করে WebSocket অথেনটিকেশন নিশ্চিত করা যায়। এটি রিয়েল-টাইম অ্যাপ্লিকেশনের নিরাপত্তা উন্নত করতে অত্যন্ত কার্যকর।

আপনার Django প্রকল্পে WebSocket Authentication প্রয়োগ করুন এবং আরও সুরক্ষিত ও দক্ষ রিয়েল-টাইম অ্যাপ্লিকেশন তৈরি করুন!

উপকৃত হলে অনুভূতি জানাতে ভুলবেন না। 😊

ধন্যবাদ! 🚀

Sign up to discover human stories that deepen your understanding of the world.

Free

Distraction-free reading. No ads.

Organize your knowledge with lists and highlights.

Tell your story. Find your audience.

Membership

Read member-only stories

Support writers you read most

Earn money for your writing

Listen to audio narrations

Read offline with the Medium app

No responses yet

Write a response