DRF 인증/권한 클래스의 전체적인 흐름

DRF에서 HTTP 요청이 View에 도달할 때 인증과 권한 체크가 어떤 순서로 일어나는지, request.userrequest.auth가 어떻게 설정되는지에 대한 핵심 동작 흐름

인증 vs 권한 개념 구분

인증(Authentication)

  • "당신은 누구입니까?" - 요청자의 신원 확인

  • 성공 시 request.userrequest.auth 설정

  • 먼저 실행되며, 실패 시 401 Unauthorized 반환

권한(Authorization)

  • "당신이 이 작업을 할 수 있습니까?" - 접근 권한 검사

  • 인증 성공 후 실행되며, 실패 시 403 Forbidden 반환

DRF 처리 흐름

1단계: 인증 (Authentication)

  • authentication_classes 목록을 순서대로 확인

  • 각 클래스의 authenticate(request) 호출

  • 성공: (user, auth) 튜플 반환 후 즉시 종료

  • 실패(자격 증명 없음): None 반환, 다음 클래스 시도

  • 실패(자격 증명 유효하지 않음): AuthenticationFailed 예외 발생

  • 모든 클래스가 None 반환 시: request.userAnonymousUser로 설정

2단계: 권한 (Authorization)

  • permission_classes 목록을 순회하며 has_permission(request, view) 호출

  • True 반환: 다음 권한 클래스 계속 검사

  • False 반환: 즉시 PermissionDenied 예외 발생

에러 응답 구분

상태 코드
DRF 예외
발생 원인

401 Unauthorized

AuthenticationFailed

JWT 토큰 만료/변조, 잘못된 API Key

401 Unauthorized

NotAuthenticated

인증 정보 없이 접근 시도

403 Forbidden

PermissionDenied

인증은 되었지만 해당 리소스 접근 권한 없음

실무 활용 팁

전역/뷰별 설정 조합

  • settings.py에 기본 인증/권한 정책 설정

  • 특정 뷰에서 필요 시 authentication_classes, permission_classes로 오버라이드

디버깅 방법

  • View 메소드 내에서 request.user, request.auth, request.user.is_authenticated 확인

  • AnonymousUser면 인증 단계 문제, 제대로 나왔는데 403이면 권한 클래스 로직 문제

Last updated