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"),
]
반응형