📌 Today I Learned (TIL) - Django Rest Framework의 Authentication & Permission
오늘은 Django Rest Framework(DRF)의 인증(Authentication)과 권한(Permission) 시스템에 대해 학습했다.
🔹 Authentication & Permission
DRF에서 인증과 권한은 API 요청을 제어하는 중요한 요소이다.
- Authentication (인증): 사용자를 식별하는 과정.
- Permission (권한): 인증된 사용자가 특정 API 요청을 수행할 수 있는지 결정.
DRF에서는 권한 시스템을 APIView 단위에서 지정할 수 있다.
🔹 DRF의 Permission System
DRF는 기본적으로 여러 권한 클래스를 제공하며, 이를 활용하여 API의 접근을 제어할 수 있다.
✅ 1. AllowAny (기본 설정)
모든 사용자(비인증 사용자 포함)가 API에 접근할 수 있도록 허용.
from rest_framework.permissions import AllowAny
permission_classes = [AllowAny]
✅ 2. IsAuthenticated
인증된 사용자(로그인한 사용자)만 API 요청을 허용.
from rest_framework.permissions import IsAuthenticated
permission_classes = [IsAuthenticated]
✅ 3. IsAdminUser
관리자(Staff) 계정만 API 요청을 허용.
from rest_framework.permissions import IsAdminUser
permission_classes = [IsAdminUser]
✅ 4. IsAuthenticatedOrReadOnly
인증되지 않은 사용자는 읽기(Read)만 가능하고, 인증된 사용자는 쓰기(Write)도 가능.
from rest_framework.permissions import IsAuthenticatedOrReadOnly
permission_classes = [IsAuthenticatedOrReadOnly]
✅ 5. DjangoModelPermissions
인증된 사용자만 API를 호출할 수 있으며, 추가적으로 Django 모델의 권한을 체크.
from rest_framework.permissions import DjangoModelPermissions
permission_classes = [DjangoModelPermissions]
- add, change, delete, view 같은 Django의 모델 권한을 기반으로 동작.
✅ 6. DjangoModelPermissionsOrAnonReadOnly
DjangoModelPermissions와 유사하지만, 비인증 사용자(익명 사용자)도 읽기(Read)는 가능.
from rest_framework.permissions import DjangoModelPermissionsOrAnonReadOnly
permission_classes = [DjangoModelPermissionsOrAnonReadOnly]
✅ 7. DjangoObjectPermissions
비인증 사용자는 API 접근이 불가능하며, 인증된 사용자는 특정 객체(Object)에 대한 권한이 있는 경우에만 접근 가능.
from rest_framework.permissions import DjangoObjectPermissions
permission_classes = [DjangoObjectPermissions]
- 예제: 특정 사용자가 생성한 데이터만 수정/삭제할 수 있도록 설정 가능.
🔹 오늘의 깨달음
- Permission 시스템은 API 보안과 데이터 보호를 위해 필수적이다.
- AllowAny는 기본 설정이지만, 보안이 중요한 API에서는 사용을 지양해야 한다.
- IsAuthenticatedOrReadOnly는 공개 데이터 조회 허용과 인증된 사용자만 수정 가능한 경우 유용하다.
- DjangoModelPermissions과 DjangoObjectPermissions를 활용하면 세밀한 권한 제어가 가능하다.
- 프로젝트에 따라 적절한 권한 클래스를 선택하여 API 보안을 강화하는 것이 중요하다.
'내일배움캠프 TIL' 카테고리의 다른 글
| 2025.03.10 TIL - RAG (1) | 2025.03.11 |
|---|---|
| 2025.03.07 TIL:Django - Logout 기능 구현 (0) | 2025.03.07 |
| 2025.02.13TIL: Django - Authentication (0) | 2025.02.13 |
| 2025.02.12TIL : LangChain (0) | 2025.02.12 |
| 2025.02.11 TIL - Django : 흐름도 (0) | 2025.02.12 |