공식문서 Permissions
공식문서 Authentication
Django REST framework에서는 BasicAuthentication, SessionAuthentication, TokenAuthentication 등의 다양한 인증방식 모듈을 제공한다. 본인은 보안성을 높일 수 있고 서버의 확장성이 용이한 토큰인증방식 (Token Authentication)을 사용할 것이다.
공식문서 - Permissions
API Reference를 참고한다.
$ pip install djangorestframework-jwt
from datetime import timedelta
REST_FRAMEWORK = {
'DEFAULT_PERMISSION_CLASSES' : ('rest_framework.permissions.IsAuthenticated',),
'DEFAULT_AUTHENTICATION_CLASSES' : ('rest_framework_simplejwt.authentication.JWTAuthentication',),
}
SIMPLE_JWT = { # 세부 설정
'ACCESS_TOKEN_LIFETIME': timedelta(minutes=5),
'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
'ROTATE_REFRESH_TOKENS': False,
'ALGORITHM': 'HS256',
'SIGNING_KEY': SECRET_KEY,
'VERIFYING_KEY': None,
'AUTH_HEADER_TYPES': ('Bearer',),
}
# urls.py
from rest_framework_simplejwt.views import (
TokenObtainPairView,
TokenRefreshView,
TokenVerifyView,
)
urlpatterns = [
path('token/', TokenObtainPairView.as_view()),
path('token/verify/', TokenVerifyView.as_view()),
path('token/refresh/',TokenRefreshView.as_view()),
]
로그인요청의 검증작업에 성공하면 refresh
, access
token을 응답
{
"refresh": "...",
"access": "..."
}
POST 요청으로 refresh
또는 access
토큰을 전송하면 그 것이 유효한지 검증한다. 유효하면 200 OK
상태코드를, 실패하면, 에러메세지와 함께 401 Unauthorized
에러를 응답
{
"detail": "Token is invalid or expired",
"code": "token_not_valid"
}
POST 요청으로 refresh
토큰을 전송하면 access
토큰을 갱신한다. 토큰이 유효하지 않으면 401 Unauthorized
에러를 응답
{
"refresh": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImV4cCI6MTU2Njc4ODU5MCwianRpIjoiMDQwNDIzOTM4MzRkNGFjZmEzYjExNGJhMDYzODEwMTQiLCJ1c2VyX2lkIjo2fQ.eeWgodljs8-5BzeQH8MzivgQi7MNXQzQmvMhaT_3awo",
"access": "eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNTY2NzAyNDkwLCJqdGkiOiI5OWM4MGVjYzQyNjU0ZjY1YjQ5YWM1ZDg1YjVkNTBkMCIsInVzZXJfaWQiOjZ9.znio3M7Amx86Jsg1lbICCStYR4zG8a5QdsHaGTrawZY"
}
JWT(JSON Web Token) JWT 소개 Velog 마스터 블로그 Django REST framework simplejwt GIT 문서 jwt.io 공식문서 JWT를 사용하게 되면 유저의 세션을 유지할 필요가 없고 서버 자원을 절약할 수 있다. JWT에서 제공하는 Acess Token & Refresh Token, Sliding Session에 ...