Django에서 JWT(JSON Web Token)를 활용하면 API 인증을 간단하고 효과적으로 구현할 수 있음
JWT는 JSON 포맷으로 클라이언트와 서버 간에 정보를 안전하게 전송하는 토큰 기반 인증 방
JWT의 구성: Header, Payload, Signature
Header에는 토큰 타입과 해싱 알고리즘 정보가 포함됨
Payload에는 사용자 정보나 기타 데이터를 포함할 수 있음 (중요한 정보는 넣지 않는 것이 좋음)
Signature는 Header와 Payload를 비밀키로 해싱하여 생성한 값으로, 토큰의 무결성을 보장함
Django에서 JWT를 사용하는 이유
세션을 사용하지 않아도 인증이 가능함
토큰만으로 인증 가능하므로 서버의 상태를 유지할 필요가 없음 (Stateless)
확장성과 성능 면에서 장점이 많음
다양한 클라이언트(웹, 모바일)에서 쉽게 사용할 수 있음
Django에서 JWT 구현하기
라이브러리 설치
pip install djangorestframework-simplejwt
설정 추가
settings.py에 아래와 같은 설정을 추가
REST_FRAMEWORK = {
'DEFAULT_AUTHENTICATION_CLASSES': (
'rest_framework_simplejwt.authentication.JWTAuthentication',
),
}
토큰 발급 및 검증 뷰 추가
SimpleJWT에서 제공하는 뷰를 사용하면 간단하게 토큰 발급 및 검증을 구현할 수 있
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'),
TokenObtainPairView: 액세스 토큰과 리프레시 토큰을 발급함
TokenRefreshView: 리프레시 토큰을 사용하여 새로운 액세스 토큰을 발급함
커스텀 설정 (선택) 필요에 따라 JWT를 커스터마이징할 수 있음
ex 토큰에 사용자 데이터를 추가/만료 시간을 변경 등
from datetime import timedelta
SIMPLE_JWT = {
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
'AUTH_HEADER_TYPES': ('Bearer',),
}
JWT 인증 적용 API 뷰에 JWT 인증을 적용하려면 DRF의 @api_view 또는 APIView와 함께 사용\
@api_view(['GET'])
@permission_classes([IsAuthenticated])
def protected_view(request):
return Response({'message': '인증 성공'})
JWT 사용 시 주의사항
토큰은 서버에서 관리되지 않으므로 유출되면 재발급하거나 만료시킬 방법이 제한적임
->HTTPS를 사용하여 토큰이 안전하게 전달되도록 해야 함
토큰은 보통 짧은 만료 시간을 설정하고, 리프레시 토큰으로 새로운 액세스 토큰을 발급하는 방식을 사용
민감한 정보를 토큰에 저장하지 않도록 주의
'장고' 카테고리의 다른 글
django CustomUserModel (0) | 2024.12.26 |
---|---|
Django REST Framework permission class (0) | 2024.12.24 |
Django Rest Framework (1) | 2024.12.19 |
RESTful API (0) | 2024.12.18 |
Django ManyToManyField (0) | 2024.12.17 |