
روز ۴۷: احراز هویت در API با Django REST Framework
یکی از بخشهای حیاتی در طراحی APIها، مدیریت دسترسی کاربران و احراز هویت آنهاست. در پروژههای واقعی، تنها کاربران مجاز باید بتوانند دادهها را مشاهده، ایجاد یا ویرایش کنند. Django REST Framework (DRF) ابزارهای قدرتمندی برای احراز هویت و مدیریت دسترسی ارائه میدهد که شامل Token Authentication، Session Authentication و JWT است. این امکانات به توسعهدهندگان اجازه میدهد تا APIهایی امن و مقیاسپذیر بسازند که از سوءاستفاده و دسترسی غیرمجاز جلوگیری کند. در این بخش، به بررسی نحوه فعالسازی و استفاده از سیستمهای احراز هویت در DRF میپردازیم و مثالهای عملی برای درک بهتر ارائه میکنیم.
نصب و فعالسازی احراز هویت
برای شروع، اگر قصد داریم از Token Authentication استفاده کنیم، نیاز به نصب بسته djangorestframework.authtoken داریم. ابتدا دستور زیر را اجرا میکنیم:
pip install djangorestframework
سپس در فایل settings.py اپ Django، اپ rest_framework و rest_framework.authtoken را به INSTALLED_APPS اضافه میکنیم:
INSTALLED_APPS = [
...
'rest_framework',
'rest_framework.authtoken',
]این مرحله باعث میشود که امکانات مدیریت توکن برای کاربران فعال شود و بتوان به راحتی توکنهای اختصاصی ایجاد و به آنها دسترسی داد. همچنین نیاز است مهاجرت دیتابیس برای ایجاد جدول توکنها اجرا شود:
python manage.py migrate
با این کار جدول authtoken_token در دیتابیس ایجاد میشود و سیستم احراز هویت آماده استفاده خواهد بود.
ایجاد توکن برای کاربران
بعد از فعالسازی، میتوان برای هر کاربر توکن اختصاصی ایجاد کرد. این توکن به عنوان کلید ورود به API عمل میکند و در هر درخواست به API باید ارسال شود. ایجاد توکن از طریق shell یا به صورت خودکار هنگام ثبتنام کاربر امکانپذیر است:
from rest_framework.authtoken.models import Token from django.contrib.auth.models import User user = User.objects.get(username='testuser') token, created = Token.objects.get_or_create(user=user) print(token.key)
با این توکن، کاربر میتواند درخواستهای احراز شده به API ارسال کند و تنها با این کلید دسترسی به منابع محدود میشود. این روش یکی از سادهترین و امنترین شیوهها برای محافظت از API است.
تنظیمات Viewها برای احراز هویت
برای استفاده از Token Authentication در Viewهای DRF، کافی است کلاس View خود را ویرایش کنیم و Authentication و Permission را اضافه کنیم. به عنوان مثال، برای View مدیریت مقالات:
from rest_framework.permissions import IsAuthenticated
from rest_framework.authentication import TokenAuthentication
from rest_framework import generics
from .models import Article
from .serializers import ArticleSerializer
class ArticleListCreateView(generics.ListCreateAPIView):
queryset = Article.objects.all()
serializer_class = ArticleSerializer
authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated]با این تنظیمات، تنها کاربران وارد شده که توکن معتبر دارند میتوانند مقالات را مشاهده یا ایجاد کنند. این سطح از کنترل امنیتی به محافظت از دادهها کمک میکند و از دسترسی غیرمجاز جلوگیری میکند.
احراز هویت در درخواستهای کلاینت
برای ارسال درخواستهای احراز شده از کلاینت مانند Postman یا اپلیکیشن موبایل، کافی است توکن را در Header درخواست اضافه کنیم:
Authorization: Token <user-token>
این کار تضمین میکند که سرور درخواست را تنها برای کاربران مجاز پردازش میکند و درخواستهای ناشناس یا غیرمجاز رد خواهند شد. همچنین این روش باعث میشود که توسعهدهندگان بتوانند مدیریت کاربران و دسترسیها را به شکل انعطافپذیر و امن انجام دهند.
گزینههای پیشرفته احراز هویت
علاوه بر Token Authentication، DRF گزینههای پیشرفته دیگری مانند JWT (JSON Web Token) ارائه میدهد که برای اپلیکیشنهای موبایل و SPA بسیار مناسب است. JWT به دلیل سبک بودن و امکان استفاده بدون Session، گزینه محبوب توسعهدهندگان است. همچنین میتوان از ترکیب Session Authentication و Permissionهای پیشرفته برای کنترل دقیق دسترسی کاربران استفاده کرد و سیاستهای مختلف امنیتی را به راحتی اعمال کرد.
جمعبندی و نکات پایانی
احراز هویت در API بخش جداییناپذیر امنیت وبسایتها و اپلیکیشنهاست. با استفاده از Django REST Framework و امکاناتی مانند Token Authentication، Session Authentication و JWT میتوان APIهایی امن، قابل اعتماد و مقیاسپذیر ایجاد کرد. تعریف Authentication و Permission در Viewها، ایجاد توکن برای کاربران و ارسال توکن در درخواستها، از دسترسی غیرمجاز جلوگیری میکند و تجربه کاربری امنی فراهم میکند. یادگیری این مفاهیم به توسعهدهندگان جنگو کمک میکند پروژههای حرفهای و امن طراحی کنند و همزمان کنترل دقیقی بر دسترسی کاربران داشته باشند.