DRF Authentication
API তে কে এক্সেস করতে পারবে আর কে পারবে না তা নিয়ন্ত্রণ করার জন্য Authentication প্রয়োজন। DRF এ গ্লোবালি বা প্রতি ভিউ লেভেলে অথেনটিকেশন সেট করা যায়।
Global Configuration
settings.py ফাইলে ডিফল্ট অথেনটিকেশন ক্লাস সেট করা যায়:
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': [
'rest_framework.authentication.SessionAuthentication',
'rest_framework.authentication.TokenAuthentication',
],
'DEFAULT_PERMISSION_CLASSES': [
'rest_framework.permissions.IsAuthenticated',
],
}1. SessionAuthentication
এটি Django-র ডিফল্ট সেশন ব্যাকএন্ড ব্যবহার করে। এটি ব্রাউজার বেসড ক্লায়েন্ট (যেখানে কুকিজ সাপোর্ট করে) এর জন্য উপযুক্ত।
- সুবিধা: CSRF প্রোটেকশন বিল্ট-ইন থাকে।
- অসুবিধা: স্টেটলেস API বা মোবাইল অ্যাপের জন্য খুব একটা সুবিধাজনক নয়।
2. TokenAuthentication
এটি একটি সিম্পল টোকেন বেসড সিস্টেম। প্রতিটি ইউজারের জন্য একটি ইউনিক টোকেন জেনারেট হয়। ক্লায়েন্ট সেই টোকেনটি হেডার হিসেবে পাঠায়।
Setup: ১. INSTALLED_APPS এ 'rest_framework.authtoken' যোগ করুন। ২. python manage.py migrate রান করুন।
Token Request Format:
Authorization: Token 9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b3. JWT Authentication (SimpleJWT)
Jason Web Token (JWT) হলো মডার্ন এবং সিকিউর অথেনটিকেশন পদ্ধতি, যা স্টেটলেস। DRF এর জন্য djangorestframework-simplejwt লাইব্রেরিটি জনপ্রিয়।
Installation:
pip install djangorestframework-simplejwtConfiguration:
# settings.py
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
)
}URL Routing:
# urls.py
from django.urls import path
from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView,
)
urlpatterns = [
path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]Token Request process:
- ক্লায়েন্ট
usernameএবংpasswordদিয়ে/api/token/এ POST রিকোয়েস্ট পাঠাবে। - সার্ভার
accessএবংrefreshটোকেন রিটার্ন করবে। - ক্লায়েন্ট
accessটোকেন দিয়ে অথেনটিকেটেড রিকোয়েস্ট পাঠাবে:httpAuthorization: Bearer <access_token> accessটোকেন মেয়াদ শেষ হলেrefreshটোকেন দিয়ে নতুন টোকেন নিবে।
Custom Authentication
খুব বিশেষ প্রয়োজনে BaseAuthentication ক্লাস ইনহেরিট করে কাস্টম অথেনটিকেশন স্কিম তৈরি করা যায়।
from rest_framework.authentication import BaseAuthentication
from django.contrib.auth.models import User
class ExampleAuthentication(BaseAuthentication):
def authenticate(self, request):
username = request.META.get('HTTP_X_USERNAME')
if not username:
return None
try:
user = User.objects.get(username=username)
except User.DoesNotExist:
raise exceptions.AuthenticationFailed('No such user')
return (user, None)