В DRF Вы можете создавать собственные классы и схемы аутентификации. Но в конце все они должны вернуть кортеж (user, auth)
. У меня есть особый случай, когда мои конечные точки будут вызываться несколькими серверами, и каждый из них имеет свой уникальный секрет, хранящийся в модели и таблице Server
в моем приложении.
Как я могу реализовать аутентификацию из этих серверов, в то время как авторизованная сущность не является Пользователем, но является какой-то другой моделью?
Это мой текущий код (не тестировался):
from rest_framework import authentication
from rest_framework import exceptions
from .models import Server
class ServerAuthentication(authentication.BaseAuthentication):
def authenticate(self, request):
server_name = request.META.get('X_Server')
server_secret = request.META.get('Authorization')
if not server_name or not server_secret:
return None
try:
server = Server.objects.get(name=server_name, secret=server_secret)
except Server.DoesNotExist:
raise exceptions.AuthenticationFailed('No such server')
return server, None