티스토리 뷰

728x90
반응형

Django REST Framework(DRF)에서는 다양한 인증 방식을 지원합니다. 그중에서도 Basic Token Authentication을 사용하면 간편하게 API 보안을 강화할 수 있습니다. 이번 글에서는 DRF에서 Basic Token을 발급하고 이를 사용하여 API 요청을 수행하는 방법을 설명하겠습니다.


1. Basic Token 인증이란?

Basic Token Authentication은 클라이언트가 요청을 보낼 때, 사용자의 자격 증명(토큰)을 HTTP 헤더에 포함하여 인증하는 방식입니다. 일반적으로 Authorization: Token <토큰> 형식으로 전송됩니다.


2. Django REST Framework에서 Basic Token 활성화하기

📌 1️⃣ DRF 설정 변경

settings.py에서 TokenAuthentication을 활성화합니다.

INSTALLED_APPS = [
    'rest_framework',
    'rest_framework.authtoken',  # Token 인증을 위한 앱 추가
]

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',  # Token 인증 활성화
    ],
    'DEFAULT_PERMISSION_CLASSES': [
        'rest_framework.permissions.IsAuthenticated',  # 인증된 사용자만 접근 가능
    ]
}

📌 2️⃣ 마이그레이션 수행

Token 모델을 데이터베이스에 반영하려면 아래 명령어를 실행하세요.

python manage.py migrate

3. Basic Token 발급하기

📌 1️⃣ 토큰을 생성하는 뷰 추가

사용자가 로그인하면 토큰을 발급해 주는 API를 만듭니다.

from rest_framework.authtoken.views import ObtainAuthToken
from rest_framework.authtoken.models import Token
from rest_framework.response import Response

class CustomAuthToken(ObtainAuthToken):
    def post(self, request, *args, **kwargs):
        serializer = self.serializer_class(data=request.data, context={'request': request})
        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})

📌 2️⃣ URL 연결

urls.py에서 위에서 만든 CustomAuthToken을 엔드포인트로 등록합니다.

from django.urls import path
from .views import CustomAuthToken

urlpatterns = [
    path('api/token/', CustomAuthToken.as_view(), name='api_token_auth'),
]

📌 3️⃣ Postman으로 토큰 발급 요청하기

  • 요청 타입: POST
  • 요청 URL: http://localhost:8000/api/token/
  • 요청 Body (JSON):
{
    "username": "your_username",
    "password": "your_password"
}
  • 응답 예시:
{
    "token": "b74d4f3e19c2f4c7d74a6c90d04d14a54b15c5f2"
}

4. API 요청 시 Basic Token 사용하기

📌 1️⃣ 요청 헤더에 토큰 추가

발급받은 토큰을 API 요청 헤더에 포함해야 합니다.

🔹 요청 방식: GET 🔹 요청 URL: http://localhost:8000/api/protected-resource/ 🔹 요청 헤더:

Authorization: Token b74d4f3e19c2f4c7d74a6c90d04d14a54b15c5f2

📌 2️⃣ Postman을 이용한 요청 예제

  • Headers 탭에서 Authorization 키를 추가하고, 값으로 Token <발급받은_토큰>을 입력합니다.
  • Body 탭은 비워둡니다.
  • 요청을 보내면 인증된 사용자로서 데이터를 받을 수 있습니다.

5. 인증이 필요한 API 보호하기

이제 특정 API 엔드포인트에서 인증된 사용자만 접근할 수 있도록 보호할 수 있습니다.

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

class ProtectedView(APIView):
    permission_classes = [IsAuthenticated]
    
    def get(self, request):
        return Response({"message": "인증된 사용자만 접근할 수 있습니다."})

urls.py에 엔드포인트 추가:

urlpatterns += [
    path('api/protected-resource/', ProtectedView.as_view(), name='protected_resource'),
]

6. 마무리

이번 글에서는 Django REST Framework에서 Basic Token 인증을 설정하고, 토큰을 발급받고, API 요청에 사용하는 방법을 다뤘습니다.

📌 요약

1️⃣ rest_framework.authtoken을 활성화하고 마이그레이션 수행
2️⃣ 사용자 로그인 시 토큰을 발급하는 API 추가
3️⃣ API 요청 시 Authorization: Token <토큰> 헤더 추가
4️⃣ 인증이 필요한 API에서 IsAuthenticated 권한 적용

이제 Django에서 간편하게 Basic Token Authentication을 활용할 수 있습니다! 🚀

728x90
반응형