[파이썬] Django REST 프레임워크를 이용한 토큰 인증

Django REST 프레임워크는 Django를 기반으로한 빠르고 유연한 웹 API 개발을 도와주는 강력한 도구입니다. 이 프레임워크를 사용하면 토큰 인증을 간편하게 구현할 수 있습니다. 이번 포스트에서는 Django REST 프레임워크를 사용하여 토큰 기반 인증을 구현하는 방법에 대해 알아보겠습니다.

토큰 인증의 개념

토큰 인증은 클라이언트가 서버에 요청을 보낼 때마다 토큰을 함께 전달하여 인증을 수행하는 방식입니다. 서버는 클라이언트가 제공한 토큰을 검증하여 유효한 사용자인지 확인한 후 요청을 처리합니다. 이 방식은 세션 기반 인증과 비교하여 아래와 같은 이점이 있습니다:

Django REST 프레임워크를 이용한 토큰 인증 구현 방법

Django REST 프레임워크에서 토큰 인증을 구현하려면 다음 단계를 따르면 됩니다:

  1. Django 프로젝트 설정: rest_frameworkrest_framework.authtoken 앱을 설치하고 TokenAuthentication을 인증 백엔드로 설정합니다.
    # settings.py
    
    INSTALLED_APPS = [
        ...
        'rest_framework',
        'rest_framework.authtoken',
        ...
    ]
    
    REST_FRAMEWORK = {
        ...
        'DEFAULT_AUTHENTICATION_CLASSES': [
            'rest_framework.authentication.TokenAuthentication',
        ],
        ...
    }
    
  2. 사용자 모델 설정: Django의 기본 사용자 모델(User)에 인증 토큰 필드를 추가합니다.
    # models.py
    
    from django.contrib.auth.models import AbstractUser
    from django.db import models
    
    class CustomUser(AbstractUser):
        token = models.CharField(max_length=255, blank=True, null=True)
    
        def generate_token(self):
            # 토큰을 생성하는 로직 추가
            self.token = 'generated_token'
            self.save()
    
  3. 인증 토큰 발급: 사용자가 로그인 성공 시 토큰을 발급하는 뷰를 작성합니다.
    # views.py
    
    from rest_framework.authtoken.models import Token
    from rest_framework.authtoken.views import ObtainAuthToken
    from rest_framework.response import Response
    
    class CustomAuthTokenView(ObtainAuthToken):
        def post(self, request, *args, **kwargs):
            serializer = self.serializer_class(data=request.data)
            serializer.is_valid(raise_exception=True)
            user = serializer.validated_data['user']
            token, created = Token.objects.get_or_create(user=user)
            return Response({'token': token.key})
    
  4. 인증이 필요한 API 설정: 인증이 필요한 API 뷰에 @authentication_classes@permission_classes 데코레이터를 추가합니다.
    # views.py
    
    from rest_framework.authentication import TokenAuthentication
    from rest_framework.permissions import IsAuthenticated
    from rest_framework.views import APIView
    
    class ProtectedView(APIView):
        authentication_classes = [TokenAuthentication]
        permission_classes = [IsAuthenticated]
    
        def get(self, request):
            # 인증된 사용자에게만 접근이 허용됩니다.
            return Response({'message': 'Authenticated'})
    

결론

Django REST 프레임워크를 이용한 토큰 인증은 간단하면서도 유연한 인증 방식입니다. 위에서 설명한 단계를 따라 구현하면 사용자 인증을 효과적으로 처리할 수 있습니다. 이 방식을 사용하면 안전한 API 서비스를 구축할 수 있으며 다양한 플랫폼에서 사용될 수 있습니다.