본문 바로가기

Web/Django

[Django] JWT 인증

JSON Web Token(JWT)은 토큰 기반 인증에 사용할 수 있는 상당히 새로운 표준이다. 내장된 TokenAuthentication 체계와 달리, JWT 인증은 토큰을 검증하기 위해 데이터베이스를 사용할 필요가 없다. JWT 인증 패키지는 플러그 가능한 토큰 블랙리스트 앱뿐만 아니라 일부 기능을 제공하는 djangorestframework-simplejwt이다.

 

Simple JWT는 Django RESTFramework를 위한 JSON 웹 토큰 인증 백엔드를 제공한다.

 

  • settings.py에 추가
REST_FRAMEWORK = {
    ...
    'DEFAULT_AUTHENTICATION_CLASSES': (
        ...
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    )
    ...
}

 

  • urls.py에 추가
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'),
    ...
]

 

  • 사용
curl \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"username": "davidattenborough", "password": "boatymcboatface"}' \
  http://localhost:8000/api/token/

...
{
  "access":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX3BrIjoxLCJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiY29sZF9zdHVmZiI6IuKYgyIsImV4cCI6MTIzNDU2LCJqdGkiOiJmZDJmOWQ1ZTFhN2M0MmU4OTQ5MzVlMzYyYmNhOGJjYSJ9.NHlztMGER7UADHZJlxNG0WSi22a2KaYSfd1S-AuT7lU",
  "refresh":"eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9.eyJ1c2VyX3BrIjoxLCJ0b2tlbl90eXBlIjoicmVmcmVzaCIsImNvbGRfc3R1ZmYiOiLimIMiLCJleHAiOjIzNDU2NywianRpIjoiZGUxMmY0ZTY3MDY4NDI3ODg5ZjE1YWMyNzcwZGEwNTEifQ.aEoAYkSJjoWH1boshQAaTkf8G3yn0kapko6HFRt7Rh4"
}
  • 반환된 access token을 사용하여 보호된 보기에 대한 인증을 증명할 수 있다.
  • 수명이 짧은 access token이 만료되면 수명이 더 긴 refresh token을 사용하여 다른 access token을 얻을 수 있다.
  • refresh token은 access token 재발급을 위한 도구인듯