Передача маркера в заголовке конечной точки ListAPIView от одного api к другому Django REST

У меня есть 2 API в Django REST.

Один API генерирует токен JWT.

Я хочу отправить этот токен в другой API.

В первом API (API 1) я передаю токен классу ListItems (/someendpoint/) в заголовке POST запроса.

import requests

token = "someToken"
requests.post("/posting/token", {token})

В другом API (API 2) я хочу получить этот JWT-токен в заголовке запроса :

в файле views.py:

class ListItems(generics.ListAPIView):
    permission_classes = [ItemsPermissions]
    queryset = SomeModel.objects.all()
    serializer_class = SomeSerializer
    

в urls.py:

url_patterns = [
    path("/someendpoint/list/", ListItems.as_view(),
]

Каков наилучший способ достижения этой цели?

Как документировано в TokenAuthentication:

Для аутентификации клиентов ключ токена должен быть включен в HTTP-заголовок Authorization. Ключ должен иметь префикс в виде строкового литерала "Token", с пробелами, разделяющими две строки.

Но он не ограничивается префиксом "Token", как отмечалось:

Примечание: Если вы хотите использовать другое ключевое слово в заголовке, например Bearer, просто подкласс TokenAuthentication и установите переменную класса ключевого слова.

Поскольку вы используете JWT токен:

представления, требующие аутентификации, будут искать заголовок следующего формата: Authorization: Bearer <token>. Эта настройка может также содержать список или кортеж возможных типов заголовков (например, ('Bearer', 'JWT')

Так что вы можете попробовать:

response = requests.get("/someendpoint/list/", headers={"Authorization": "Bearer eyJxxxxxx"})

Or:

response = requests.get("/someendpoint/list/", headers={"Authorization": "JWT eyJxxxxxx"})

Убедитесь, что вы правильно настроили классы аутентификации, как описано здесь либо через:

  1. views.py
class ListItems(generics.ListAPIView):
    authentication_classes = [
        # Only list here what you needed
        rest_framework.authentication.TokenAuthentication,
        rest_framework_jwt.authentication.JSONWebTokenAuthentication,
    ]
    ...
  1. or settings.py
...
REST_FRAMEWORK = {
    'DEFAULT_AUTHENTICATION_CLASSES': [
        # Only list here what you needed
        'rest_framework.authentication.TokenAuthentication',
        'rest_framework_jwt.authentication.JSONWebTokenAuthentication',
    ],
    ...
}
...
Вернуться на верх