Token-basierte Authentifizierung mit Django REST Framework in 15 Minuten (inkl. Postman)
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)
- Öffne Postman und erstelle einen neuen Request.
- Methode:
POST - URL:
http://127.0.0.1:8000/api/login/ - Gehe auf den Reiter Body -> Wähle raw und stelle ganz rechts das Format auf JSON um.
- Gib die Daten deines Superusers ein:
{ "username": "admin", "password": "dein_passwort" } - Klicke auf Send.
- Antwort (200 OK): Du erhältst einen Schlüssel zurück:
{ "token": "9944b09199c62bcf9418ad846dd0e4bbdfc6ee4b" }Kopiere diesen Token-Wert.
Test 2: Ungeschützter Zugriff (Fehlertest)
- Erstelle einen zweiten Tab in Postman.
- Methode:
GET - URL:
http://127.0.0.1:8000/api/secret/ - Klicke auf Send (ohne Header).
- Ergebnis: Du erhältst einen Status
401 Unauthorized:{ "detail": "Zu dieser Ressource wurde kein Authentifizierungs-Token übergeben." }
Test 3: Geschützter Zugriff mit Token
- Bleibe im gleichen Tab für
http://127.0.0.1:8000/api/secret/. - Wechsle auf den Reiter Headers.
- Füge ein neues Key-Value-Paar hinzu:
- Key:
Authorization - Value:
Token <dein_kopierter_token>(Wichtig: Das WortToken, gefolgt von einem Leerzeichen und dem Key)
- Key:
- Klicke auf Send.
- Ergebnis (200 OK):
{ "status": "Erfolg", "message": "Hallo admin, du hast Zugriff auf diese geschützten Daten!" }
Zusammenfassung
In weniger als 15 Minuten hast du:
- Das integrierte
authtoken-Modul von Django REST Framework aktiviert. - Den
obtain_auth_token-Endpunkt für den Login eingerichtet. - Views mit
IsAuthenticatedabgesichert. - Den Auth-Flow (POST für Token $\rightarrow$ GET mit
Authorization: Token <key>-Header) via Postman validiert.