Identifikatsiya, Autentifikatsiya, Avtorizatsiya. Session va JWT tokenlar
10-sinfAdvanced Python Back-end2-hafta · 4-darsIdentifikatsiya, autentifikatsiya va avtorizatsiya tushunchalari va ularning farqi.
Stateful va Stateless autentifikatsiya, JSON Web Token anatomiyasi.
Email orqali kiruvchi Custom User modeli va SimpleJWT sozlamalari.
Foydalanuvchini aniqlash va huquqlarni tekshirish
Har bir foydalanuvchi tizimga kirishda shu zanjirdan o'tadi
Stateful va Stateless autentifikatsiyani taqqoslash
Nuqta bilan ajratilgan: Header . Payload . Signature
15-60 daqiqa yashaydi. Har bir API so'rovida yuboriladi: Authorization: Bearer <token>.
O'g'irlangan taqdirda ham muddati tezda tugaydi.
7-30 kun yashaydi. Faqat yangi access token olish uchun ishlatiladi.
Foydalanuvchini har 15 daqiqada qayta login qilishdan qutqaradi.
Email orqali identifikatsiya va kengaytirilgan profil
class User(TimeStampedModel, AbstractBaseUser, PermissionsMixin):
email = models.EmailField(unique=True)
full_name = models.CharField(max_length=160, blank=True)
avatar = models.ImageField(upload_to="avatars/", blank=True, null=True)
is_active = models.BooleanField(default=True)
is_staff = models.BooleanField(default=False)
objects = UserManager()
USERNAME_FIELD = "email"
REQUIRED_FIELDS: list[str] = []
def __str__(self) -> str:
return self.email
AUTH_USER_MODEL = "accounts.User"
REST_FRAMEWORK = {
"DEFAULT_AUTHENTICATION_CLASSES": (
"rest_framework_simplejwt.authentication.JWTAuthentication",
),
}
from datetime import timedelta
SIMPLE_JWT = {
"ACCESS_TOKEN_LIFETIME": timedelta(minutes=60),
"REFRESH_TOKEN_LIFETIME": timedelta(days=7),
}
So'rov: {"email": "[email protected]", "password": "pass"}
HTTP 200 OK
{
"refresh": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...",
"access": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
Bosing va tekshiring
Foydalanuvchi kiritgan parol yoki token orqali uning kimligini tasdiqlash.
Bosing va tekshiring
Server xotirasini band qilmaydigan, raqamli imzoli xavfsiz token.
Bosing va tekshiring
Access token eskirganda yangisini olish uchun xizmat qiladi.
Nima sababdan JWT tokenda Signature (raqamli imzo) kerak?
user_id, email, roles.
apps/accounts/models.py da User va UserManager kodini yozing.
AUTH_USER_MODEL = "accounts.User" qilib, migratsiyani amalga oshiring.
rest_framework_simplejwt orqali token oling va sarlavhada Bearer bilan testlang.
Keyingi darsda: Ruxsatlar (Permissions) tizimi, IsAuthorOrReadOnly va kirish huquqlarini cheklash!