📌 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]
  • 예제: 특정 사용자가 생성한 데이터만 수정/삭제할 수 있도록 설정 가능.

🔹 오늘의 깨달음

  1. Permission 시스템은 API 보안과 데이터 보호를 위해 필수적이다.
  2. AllowAny는 기본 설정이지만, 보안이 중요한 API에서는 사용을 지양해야 한다.
  3. IsAuthenticatedOrReadOnly는 공개 데이터 조회 허용인증된 사용자만 수정 가능한 경우 유용하다.
  4. DjangoModelPermissions과 DjangoObjectPermissions를 활용하면 세밀한 권한 제어가 가능하다.
  5. 프로젝트에 따라 적절한 권한 클래스를 선택하여 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

+ Recent posts