DRF «Несанкционированный: » при наличии заголовка авторизации из React FE

#reactjs #django #authentication #django-rest-framework #access-token

#reactjs #django #аутентификация #django-rest-framework #токен доступа

Вопрос:

Я работаю над интеграцией с Azure AD. Мой ReactJS FE получает accessToken , и теперь мне нужно отправить его в Django / DRF BE, чтобы аутентифицировать его и там.

Во всяком случае, я отправляю токен как a Authorization: "Bearer <token>" и получаю Unauthorized: <route> ответ. Если я закомментирую это, запрос будет выполнен.

Я просто пытаюсь понять пару вещей:

  1. Наличие Authorization заголовка, очевидно, говорит DRF, что с ним нужно что-то сделать. Нужно ли что-то включить в настройках DRF, чтобы справиться с этим?
  2. Должен ли я отправлять это accessToken в свой API в заголовках или теле POST запроса?
 // Authentication.js
...
  const testApiAuthentication = async () => {
    let accessToken = await authProvider.getAccessToken();
    setAccessToken(accessToken.accessToken);
    if (accessToken) {
      setAuthenticatingToken(true);
      axios({
        method: 'post',
        url: '/api/users/',
        headers: {
          Authorization: 'Bearer '   accessToken,
        },
      })
        .then((response) => {
          console.log(response);
        })
        .catch((error) => {
          console.log(error);
        });
    }
  };
...

  
 # views.py
from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import AllowAny

# Create your views here.
class TestView(APIView):
    permission_classes = [AllowAny]

    def post(self, request, *args, **kwargs):
        print(request)
        return Response('Hello World')
  

Ответ №1:

Я изменил свой TestView на следующий, и теперь я получаю успешный ответ от API:

 from rest_framework.views import APIView
from rest_framework.response import Response
from rest_framework.permissions import AllowAny
from rest_framework.authentication import TokenAuthentication

# Create your views here.
class TestView(APIView):
    authentication_classes = [TokenAuthentication]
    permission_classes = [AllowAny]

    def post(self, request, *args, **kwargs):
        print(request)
        return Response('Hello World')
  

Комментарии:

1. Работает ли этот подход?

2. Здесь мы даже не проверяем токен с запросом