반응형
앞선 글에서, 코드에 대한 설명이 조금 부족한 것 같아서 추가적인 설명이다.
[Custom] Django와 CustomJWT로 안전한 인증 시스템 구축하기
웹 애플리케이션 개발에서 인증은 매우 중요한 부분이고, JWT는 웹과 API에서 인증 및 권한 부여를 효율적이고 안전하게 관리해주는 매우 유용한 인증 기법이다. 처음 JWT에 대해서 공부하고 적용
jongseoung.tistory.com
CustomJWTAuthentication 클래스와 CustomJWTBackend 클래스는 둘 다 JWT 토큰을 사용한 인증을 수행하지만, 사용되는 시점과 방식에 차이가 있다.
CustomJWTAuthentication
역할
- CustomJWTAuthentication 클래스는 미들웨어로 사용되어, 요청(Request)이 Django 애플리케이션에 도달하기 전에 실행
- 주로 API 호출 시 클라이언트가 제공한 JWT 토큰을 검증하고, 인증된 사용자를 식별하는 역할
주요 메서드
- authenticate:
- request 객체를 인수로 받아, 부모 클래스(JWTAuthentication)의 authenticate 메서드를 호출
- InvalidToken, AuthenticationFailed, TokenError 예외가 발생하면 AccessTokenUnAuthorized 예외를 발생
- get_validated_token:
- JWT 토큰을 검증
- api_settings.AUTH_TOKEN_CLASSES에서 정의한 토큰 클래스들을 사용하여 토큰을 파싱하고 검증
- 토큰의 refresh_jti 필드를 이용해 OutstandingToken 모델에서 해당 토큰이 블랙리스트에 포함여부 확인
- 유효하지 않은 토큰이거나 블랙리스트에 포함된 토큰이면 AccessTokenUnAuthorized 예외를 발생
특징
- 미들웨어로서 모든 요청에 대해 JWT 토큰의 유효성을 검증합니다.
- 주로 RESTful API 호출 시 사용됩니다.
- 클라이언트가 제공한 JWT 토큰이 유효한지 확인하고, 이를 통해 사용자 인증을 수행합니다.
CustomJWTBackend
역할
- CustomJWTBackend 클래스는 주로 사용자 인증을 위해 로그인 시 호출됩니다.
- 사용자의 자격 증명(이메일/비밀번호)을 검증하고, 사용자 객체를 반환합니다.
주요 메서드
- authenticate:
- request 객체와 사용자 자격 증명(이메일 또는 사용자 이름, 비밀번호)을 인수로 받아 처리
- 사용자 모델에서 주어진 자격 증명으로 사용자를 조회
- 사용자가 존재하지 않거나 비밀번호가 일치하지 않으면 각각 UserNotFound, UserPasswordInvalid 예외를 발생
- 유효한 자격 증명이면 사용자 객체를 반환
- get_user:
- user id 또는 JWT를 이용해 사용자 객체를 반환
- Django Admin 세션 인증을 위해 user id를 사용하거나, API JWT 인증을 위해 JWT에서 추출한 정보를 사용
- 사용자가 존재하지 않거나 비활성화된 상태이면 AccessTokenUnAuthorized 예외를 발생
특징
- 주로 로그인 시 사용자 자격 증명을 검증하는 데 사용됩니다.
- Django Admin 로그인을 처리하거나, 사용자 자격 증명을 기반으로 사용자 객체를 반환합니다.
- RESTful API 호출과 달리, 사용자 로그인 시점에서 자격 증명을 검증하는 데 특화되어 있습니다.
요약
- CustomJWTAuthentication:
- 요청 시점에 JWT 토큰을 검증하고 사용자 인증을 수행하는 미들웨어
- 주로 RESTful API 호출시 사용됨
- CustomJWTBackend:
- 사용자 로그인 시 자격 증명을 검증하고 사용자 객체를 반환하는 백엔드
- Django Admin 로그인 및 사용자 자격 증명 검증에 사용됨.
반응형
'BackEnd > Django, DRF' 카테고리의 다른 글
[Django] timezone 모듈과 datetime 모듈의 차이 & 사용법 (1) | 2024.06.04 |
---|---|
[DRF] Django로 일간 및 주간 조회수 구현하기: 코드 예제 (0) | 2024.06.04 |
[회고록] 효율적인 Django 시작하기: initialize_django 프로젝트 (0) | 2024.05.27 |
[Custom] Custom Logging Mixin With CRUD Mixin (0) | 2024.05.23 |
[Custom] Django와 CustomJWT로 안전한 인증 시스템 구축하기 (0) | 2024.05.23 |