서론
Django REST Framework(DRF)와 함꼐 사용되는 SimpleJWT는 JSON Web Token(JWT)을 사용하여 인증을 제공하는 강력한 도구입니다.
핵십 개념
- JWT는 사용자 인증 정보를 안전하게 전송하기 위한 콤팩트하고 자체 포함된 방식입니다.
- SimpleJWT는 DRF와 함께 사용하여 토큰 기반 인증 시스템을 구축합니다
필요성
- 보안 강화
JWT는 사용자의 인증 정보를 안전하게 전송할 수 있는 방식입니다. 액세스 토큰은 사용자의 인증 상태를 나타내며, 이를 API 요청에 포함시킴으로써 서버는 사용자의 인증 상태를 검증할 수 있습니다.
- 상태 비저장(Stateless)인증
액세스 토큰은 서버가 사용자의 세션 상태를 유지할 필요 없이 각 요청을 독립적으로 인증할 수 있게 해줍니다. 이는 서버의 부하를 줄이고 확장성을 증가시킵니다.
- 액세스 토큰 갱신
액세스 토큰은 짧은 유효 기간을 가진므로, 만료되면 'api/token/refresh/'경로를 통해 새로운 토큰을 발급받을 수 있습니다. 이는 보안을 강화하는 동시에 사용자의 지속적인 인증을 보장합니다.
기본 사용법
설치
pip install djangorestframework-simplejwt
settins.py
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 = [
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/'경로를 통해 갱신할 수 있습니다.
장단점
장점
- 보안성: JWT는 정보가 암호화 되어 있어 안전한 인증 방식을 제공합니다.
- 효율성: 상태 비저장 인증은 서버 부하를 줄이고, API 응답시간을 개선합니다.
- 유연성: 다양한 프론트엔드 프레임워크와 호환되며, REST API와 쉽게 통합할 수 있습니다.
- 확장성: 대규모 사용자 기반을 가진 애플리케이션에서도 효과적으로 작동합니다.
단점
- 토큰 보안 관리: 액세스 토큰이 탈취되면, 유효 기간이 만료될 때까지 보안 위험이 존재합니다.
- 복잡성: JWT와 인증 시스템 구축은 초보 개발자에게 다소 복잡할 수 있습니다.
- 상태 비저장 한계: 서버가 사용자의 상태를 전혀 저장하지 않기 때문에, 액세스 토큰이 유효한 경우 어떠한 사용자도 인증이 가능해질 수 있습니다.
예를 들어 로그아웃 시 토큰 무효화의 어려움이 있을 수 있습니다.