Как использовать аутентификацию JWT-токена для API-запросов с помощью rest_framework_simplejwt без необходимости идентификации пользователя?
 У меня есть конечная точка API для моего приложения django, где я позволяю любому человеку с маркером доступа JWT (действительным в течение 15 минут) использовать API. Но это не работает, когда я делаю GET-запрос с маркером доступа. Аутентификация отвечает "Token contained no recognizable user identification". Поскольку доступ к API с маркером должен быть разрешен любому, мне не нужно проверять, действителен ли он для какого-то конкретного пользователя.
JWT - это требование в проекте, чтобы иметь аутентификацию пользователей без статических данных для других API.
Каков правильный/стандартный способ избежать этого? Нужен ли мне пользовательский класс или есть какой-либо лучший способ реализовать аутентификацию с помощью токенов для API?
Я понял это.
Добавлены два класса - классы пользовательской аутентификации и разрешений.
Класс неаутентификации. Просто проверяет, предоставлен ли токен, если предоставлен, проверяет, действителен ли токен.
from rest_framework_simplejwt.exceptions import InvalidToken, TokenError
from rest_framework_simplejwt.tokens import AccessToken
from rest_framework.authentication import BaseAuthentication
class AnonAuthentication(BaseAuthentication):
    def authenticate(self, request):
        auth_header = request.META.get('HTTP_AUTHORIZATION')
        if not auth_header:
            return None
        try:
            prefix, token = auth_header.split()
            if prefix.lower() != 'bearer':
                return None
        except ValueError:
            return None
        try:
            validated_token = AccessToken(token)
            return (None, validated_token)
        except TokenError:
            raise InvalidToken('Token is invalid or expired')
    def authenticate_header(self, request):
        return 'Bearer realm="api"'
Пользовательский класс разрешения только проверяет, авторизован токен или нет.
from rest_framework.permissions import BasePermission
class IsAuthenticatedOrToken(BasePermission):
    def has_permission(self, request, view):
        return bool(request.auth)
Пример:
class CustomAPIListView(generics.ListAPIView):
    queryset = CustomModel.objects.all()
    permission_classes = [IsAuthenticatedOrToken] 
    authentication_classes = [AnonAuthentication]
    ...