Django Rest framework не принимает аутентификацию JWT

Я не занимаюсь бэкендом и питоном и пытаюсь реализовать JSON REST-API с помощью django и django restframework. Для аутентификации я хотел бы использовать простой jwt для django.

Я реализовал его с помощью этого руководства по началу работы: https://django-rest-framework-simplejwt.readthedocs.io/en/latest/getting_started.html

Я получаю правильную строку JWT, но если я хочу получить данные с помощью GET запроса и jwt в заголовке Authentication, я всегда получаю 403 с {message: 'Authentication credentials were not provided'}.

Мой код выглядит следующим образом:

settings.py

from pathlib import Path
import os

from datetime import timedelta

from rest_framework.permissions import IsAuthenticated, DjangoModelPermissions, AllowAny

...

INSTALLED_APPS = [
    'rest_framework_simplejwt',
    'rest_framework',
]

...

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES': (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework_simplejwt.authentication.JWTAuthentication',
    ),
}


SIMPLE_JWT = {
    'ACCESS_TOKEN_LIFETIME': timedelta(minutes=60),
    'REFRESH_TOKEN_LIFETIME': timedelta(days=1),
    'AUTH_HEADER_TYPES': ('Bearer',),
}

CORS_ALLOW_ALL_ORIGINS = True

PERMISSION_CLASSES = [IsAuthenticated]

urls.py

from django.contrib import admin
from django.urls import include, path

from rest_framework.schemas import get_schema_view
from rest_framework.documentation import include_docs_urls
from rest_framework_simplejwt.views import (
    TokenObtainPairView,
    TokenRefreshView,
    TokenVerifyView
)

urlpatterns = [
    path('api-auth/', include('rest_framework.urls')),
    path('api/token/', TokenObtainPairView.as_view(), name='token_obtain_pair'),
    path('api/token/refresh/', TokenRefreshView.as_view(), name='token_refresh'),
    path('api/token/verify/', TokenVerifyView.as_view(), name='token_verify'),
    path('nutzer_api/', include('nutzer.urls')),
    path('admin/', admin.site.urls),
    path('docs/', include_docs_urls(title="DatenmanagerAPI")),
    ]

nutzer/settings.py

from django.urls import path
from . import views

urlpatterns = [
    path('hello/', views.HelloView.as_view(), name='hello'),
]

nutzer/urls.py

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


class HelloView(APIView):
    permission_classes = (IsAuthenticated,)

    def get(self, request):
        content = {'message': 'Hello, World!'}
        return Response(content)
curl \
  -X POST \
  -H "Content-Type: application/json" \
  -d '{"username": "admin", "password": "admin"}' \
  http://localhost:8001/api/token/

возвращает json с маркером доступа и обновления

curl -X GET -H "Content-Type: application/json" -H "Authorization: Bearer eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ0b2tlbl90eXBlIjoiYWNjZXNzIiwiZXhwIjoxNjY1ODYxMjMzLCJqdGkiOiI3OTExOGUwNWJhMmY0YTBmYTk1ZWUwYmFmMmY0MTY2YyIsInVzZXJfaWQiOjF9.1jVUhBi8fySURPgBpwLcbs8W5anvZzZ9tgduGf-gX8E" http://localhost:8001/nutzer_api/hello

возвращает значение 403. То же самое с postman.

Если я изменю значение permission_classes в nutzer/urls.py на IsAuthenticatedOrReadOnly, я получу правильный ответ.

Проект работает в среде docker. Есть ли какая-нибудь очевидная ошибка, которую я допустил?

Огромное спасибо за помощь! Будьте здоровы, Матиас

Вернуться на верх