DRF SimpleJWT 사용법 및 예제

이도현·2023년 12월 11일
0

Django 공부

목록 보기
6/8

서론

Django REST Framework(DRF)와 함꼐 사용되는 SimpleJWT는 JSON Web Token(JWT)을 사용하여 인증을 제공하는 강력한 도구입니다.

핵십 개념

  • JWT는 사용자 인증 정보를 안전하게 전송하기 위한 콤팩트하고 자체 포함된 방식입니다.
  • SimpleJWT는 DRF와 함께 사용하여 토큰 기반 인증 시스템을 구축합니다

필요성

  1. 보안 강화
    JWT는 사용자의 인증 정보를 안전하게 전송할 수 있는 방식입니다. 액세스 토큰은 사용자의 인증 상태를 나타내며, 이를 API 요청에 포함시킴으로써 서버는 사용자의 인증 상태를 검증할 수 있습니다.
  2. 상태 비저장(Stateless)인증
    액세스 토큰은 서버가 사용자의 세션 상태를 유지할 필요 없이 각 요청을 독립적으로 인증할 수 있게 해줍니다. 이는 서버의 부하를 줄이고 확장성을 증가시킵니다.
  3. 액세스 토큰 갱신
    액세스 토큰은 짧은 유효 기간을 가진므로, 만료되면 'api/token/refresh/'경로를 통해 새로운 토큰을 발급받을 수 있습니다. 이는 보안을 강화하는 동시에 사용자의 지속적인 인증을 보장합니다.

기본 사용법

설치

pip install djangorestframework-simplejwt

settins.py

  • SimpleJWT 인증 추가
REST_FRAMEWORK = {
	'DEFAULT_AUTHENTICATION_CLASSED':{
    	'rest_framework_simplejwt.authentication.JWTAuthentication',
    },
}

urls.py

  • 토큰 발급 및 갱신 경로 추가
form django.urls import path
from rest_framework_simplejwt.views import TokenObtainPairView, TokenRefreshView


urlpatterns = [
    # ... 기존 URL 패턴
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
]

작동

  • 사용자가 'api/token'경로로 로그인 정보를 전송하면 액세스 토큰과 리프레시 토큰을 발급받습니다.
  • 액세스 토큰은 API 요청 시 인증 헤더에 포함되며, 만료되었을 경우 'api/token/refresh/'경로를 통해 갱신할 수 있습니다.

장단점

장점

  1. 보안성: JWT는 정보가 암호화 되어 있어 안전한 인증 방식을 제공합니다.
  2. 효율성: 상태 비저장 인증은 서버 부하를 줄이고, API 응답시간을 개선합니다.
  3. 유연성: 다양한 프론트엔드 프레임워크와 호환되며, REST API와 쉽게 통합할 수 있습니다.
  4. 확장성: 대규모 사용자 기반을 가진 애플리케이션에서도 효과적으로 작동합니다.

단점

  1. 토큰 보안 관리: 액세스 토큰이 탈취되면, 유효 기간이 만료될 때까지 보안 위험이 존재합니다.
  2. 복잡성: JWT와 인증 시스템 구축은 초보 개발자에게 다소 복잡할 수 있습니다.
  3. 상태 비저장 한계: 서버가 사용자의 상태를 전혀 저장하지 않기 때문에, 액세스 토큰이 유효한 경우 어떠한 사용자도 인증이 가능해질 수 있습니다.

    예를 들어 로그아웃 시 토큰 무효화의 어려움이 있을 수 있습니다.

profile
좋은 지식 나누어요

0개의 댓글