본문 바로가기

Web Development/Django

[Django] JWT 개념 및 사용법 (djangorestframework-simplejwt)

728x90

개념

JWT는 JSON Web Token을 줄인 말로 인증 시스템이다.

JWT 사용함으로 서버는 유저의 세션을 유지할 필요가 없기 때문에 서버 자원을 아낄 있게 된다.

JWT는 access token refresh token을 가지고 있다.

 

 

access token은 잠시동안만 살아있습니다. 기본값은 5분이고 커스터마이징이 가능하다.

refresh token은 조금 더 긴 24시간동안 살아있고 역시 커스터마이징이 가능하다.

토큰이 만료가 되면 당연히 다시 로그인을 해야한다.

구성

JWT는 세 부분으로 구성되어 있다

header.payload.signature

signature

signature에는 header(base64) + payload(base64) + SECRET_KEY로 구성되어 있다. SECRET_KEY를 배포 시에 드러나지 않게 해야하는 이유가 하나 더 생겼다. signature는 이러한 정보다 맞는지 검증하는데 사용된다.

 

 

 

설치

pip install djangorestframework-simplejwt

사용

프로젝트 디렉토리 내 settings.py

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ],
}

프로젝트 디렉토리 내 urls.py

from django.contrib import admin
from django.urls import path, include
from rest_framework_simplejwt import views as jwt_views
from apiviews import views

urlpatterns = [
    path('admin/', admin.site.urls),
    path('api/token/', jwt_views.TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', jwt_views.TokenRefreshView.as_view(), name='token_refresh'),
]

 앱 디렉토리 내 views.py

from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import IsAuthenticated

class HelloView(APIView):
    permission_classes = (IsAuthenticated,)
    
    def get(self, request):
        content = {'message': 'Hello, World!'}
        return Response(content)

 앱 디렉토리 내 urls.py (urls.py 파일 생성 필요)

from django.urls import path
from . import views

urlpatterns = [
    path('', views.HelloView.as_view(), name="hello"),
]

 

반응형