Token-basierte Authentifizierung mit Django REST Framework in 15 Minuten (inkl. Postman)

Melden

Token-basierte Authentifizierung ist der Standard für moderne Web- und Mobile-APIs. In dieser Schritt-für-Schritt-Anleitung lernst du, wie du das integrierte TokenAuth-System des Django REST Frameworks (DRF) einrichtest, einen geschützten Endpunkt erstellst und alles mit Postman testest.


Voraussetzungen

  • Python ist auf deinem System installiert.
  • Postman ist installiert (oder ein ähnlicher API-Client).

Schritt 1: Projekt-Setup & Installation (3 Minuten)

Öffne dein Terminal und erstelle ein neues Verzeichnis sowie eine virtuelle Umgebung:

# Verzeichnis erstellen & wechseln
mkdir django_token_auth
cd django_token_auth

# Virtuelle Umgebung erstellen und aktivieren
python -m venv venv
# Windows:
venv\Scripts\activate
# Mac/Linux:
source venv/bin/activate

# Pakete installieren
pip install django djangorestframework

# Django-Projekt erstellen
django-admin startproject apiproject .

Schritt 2: Django-Konfiguration (settings.py) (2 Minuten)

Öffne apiproject/settings.py und füge rest_framework sowie rest_framework.authtoken zu den installierten Apps hinzu:

INSTALLED_APPS = [
    # ... Standard-Django-Apps ...
    'django.contrib.staticfiles',

    # Drittanbieter
    'rest_framework',
    'rest_framework.authtoken',  # Generiert die Token-Tabelle in der DB
]

Füge am Ende der settings.py die Standard-Authentifizierungsklasse für das REST Framework hinzu:

REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        'rest_framework.authentication.TokenAuthentication',
    ],
}

Schritt 3: Migrationen ausführen & Superuser erstellen (2 Minuten)

Das Modul authtoken benötigt eine eigene Tabelle in der Datenbank. Führe die Migrationen aus und erstelle einen Benutzer für den Test:

# Tabellen anlegen
python manage.py migrate

# Test-Benutzer erstellen
python manage.py createsuperuser

(Folge den Anweisungen im Terminal und vergib z. B. Benutzername admin und ein sicheres Passwort).


Schritt 4: Endpunkte definieren (urls.py und views.py) (4 Minuten)

1. Eine geschützte Test-View erstellen

Erstelle eine neue Datei apiproject/views.py:

from rest_framework.decorators import api_view, permission_classes
from rest_framework.permissions import IsAuthenticated
from rest_framework.response import Response

@api_view(['GET'])
@permission_classes([IsAuthenticated])
def secret_data(request):
    return Response({
        "status": "Erfolg",
        "message": f"Hallo {request.user.username}, du hast Zugriff auf diese geschützten Daten!"
    })

2. URLs konfigurieren

Öffne apiproject/urls.py und registriere sowohl den Login-Endpunkt von DRF (obtain_auth_token) als auch unsere geschützte View:

from django.contrib import admin
from django.urls import path
from rest_framework.authtoken.views import obtain_auth_token
from .views import secret_data

urlpatterns = [
    path('admin/', admin.site.urls),
    # Endpunkt, um Benutzername/Passwort gegen einen Token zu tauschen:
    path('api/login/', obtain_auth_token, name='api_token_auth'),
    # Unser geschützter Endpunkt:
    path('api/secret/', secret_data, name='secret_data'),
]

Schritt 5: Server starten (1 Minute)

Starte deinen Django-Entwicklungsserver im Terminal:

python manage.py runserver

Schritt 6: Testen mit Postman (3 Minuten)

Test 1: Token abrufen (Login)

  1. Öffne Postman und erstelle einen neuen Request.
  2. Methode: POST
  3. URL: http://127.0.0.1:8000/api/login/
  4. Gehe auf den Reiter Body -> Wähle raw und stelle ganz rechts das Format auf JSON um.
  5. Gib die Daten deines Superusers ein:
    {
        "username": "admin",
        "password": "dein_passwort"
    }
  6. Klicke auf Send.
  7. Antwort (200 OK): Du erhältst einen Schlüssel zurück:
    {
        "token": "9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b"
    }

    Kopiere diesen Token-Wert.


Test 2: Ungeschützter Zugriff (Fehlertest)

  1. Erstelle einen zweiten Tab in Postman.
  2. Methode: GET
  3. URL: http://127.0.0.1:8000/api/secret/
  4. Klicke auf Send (ohne Header).
  5. Ergebnis: Du erhältst einen Status 401 Unauthorized:
    {
        "detail": "Zu dieser Ressource wurde kein Authentifizierungs-Token übergeben."
    }

Test 3: Geschützter Zugriff mit Token

  1. Bleibe im gleichen Tab für http://127.0.0.1:8000/api/secret/.
  2. Wechsle auf den Reiter Headers.
  3. Füge ein neues Key-Value-Paar hinzu:
    • Key: Authorization
    • Value: Token <dein_kopierter_token> (Wichtig: Das Wort Token, gefolgt von einem Leerzeichen und dem Key)
  4. Klicke auf Send.
  5. Ergebnis (200 OK):
    {
        "status": "Erfolg",
        "message": "Hallo admin, du hast Zugriff auf diese geschützten Daten!"
    }

Zusammenfassung

In weniger als 15 Minuten hast du:

  1. Das integrierte authtoken-Modul von Django REST Framework aktiviert.
  2. Den obtain_auth_token-Endpunkt für den Login eingerichtet.
  3. Views mit IsAuthenticated abgesichert.
  4. Den Auth-Flow (POST für Token $\rightarrow$ GET mit Authorization: Token <key>-Header) via Postman validiert.
0