Удаленный DRF Auth и обработка полезной нагрузки с помощью JWT
У меня есть auth_service, tpm_api и frontend enviroments. Все сервисы используют один и тот же secret_key. Мои пользователи и разрешения находятся на auth_service. Я использую jwt_simple для аутентификации на auth_service. На фронтенд-сервисе я получаю токен от auth_service с именем пользователя и паролем. Я отправляю запросы к конечным точкам в моем сервисе tpm_api с этим токеном. Я анализирую ответ и отображаю его в моем фронтенд-сервисе. До сих пор никаких проблем.
Однако я не получаю данные token.payload в службе tpm_api.
Я добавил REST_FRAMEWORK = { "DEFAULT_AUTHENTICATION_CLASSES": ( "rest_framework_simplejwt.authentication.JWTAuthentication", ), } in settings.py.
Когда я отправляю запрос в службу tpm_api, в разделе self.request.authenticators есть <rest_framework.authentication.BasicAuthentication объект 0x000001668986C430> и <rest_framework.authentication.SessionAuthentication объект 0x000001668986C6A0>.
Мне нужен <объект rest_framework_simplejwt.authentication.JWTAuthentication по адресу 0x000001FFDCD23790>.
У меня нет модели пользователя нигде, кроме auth_service.
##### auth_service model.py #####
from django.db import models
from django.contrib.auth.models import AbstractUser
perm_parent_choices = [
("app", "app"),
("factory", "factory"),
("department", "department"),
("role", "role"),
]
class User(AbstractUser):
perms = models.ManyToManyField("login.Perm", related_name="user_perms", blank=True)
gsm = models.CharField(max_length=15, null=True)
class Perm(models.Model):
parent = models.CharField(max_length=50, choices=perm_parent_choices, null=True)
name = models.CharField(max_length=50)
short_code = models.CharField(max_length=5)
def __str__(self):
return self.short_code
##### auth_service views.py #####
class UserViewSet(viewsets.ModelViewSet):
serializer_class = serializers.UserSerializer
queryset = models.User.objects.all()
def list(self, request, *args, **kwargs):
##############################
from rest_framework_simplejwt.authentication import JWTAuthentication
JWT_authenticator = JWTAuthentication()
response = JWT_authenticator.authenticate(request)
if response is not None:
# unpacking
user , token = response
request.session["perms"] = token.payload["perms"]
print(request.session["perms"])
# print("this is decoded token claims", token.payload)
else:
print("no token is provided in the header or the header is missing")
##############################
return super().list(request, *args, **kwargs)
##### tpm_api_service views.py #####
class MachineGroupViewSet(viewsets.ModelViewSet):
queryset = models.MachineGroup.objects.all()
serializer_class = serializers.MachineGroupSerializer
# authentication_classes = []
def get_queryset(self):
r = self.request.authenticators
print(r)
from rest_framework_simplejwt.authentication import JWTAuthentication
JWT_authenticator = JWTAuthentication()
response = JWT_authenticator.authenticate(self.request)
return super().get_queryset()
Здесь я не вижу объект simple_jwt.