Базовая проверка подлинности Django Rest Framework против базовой проверки подлинности Apache 2.4. Где выполняется проверка подлинности моего запроса API? - PullRequest
0 голосов
/ 19 ноября 2018

У меня есть базовый DRF API, встроенный в базовое приложение Django, размещенный на Apache 2.4.

В конфигах Apache я даю авторизацию / доступ к приложению любому, кто находится на нашем локальном сервере, с дополнительной базовой настройкой аутентификации (для тестирования), позволяющей API-вызову с внешнего сервера взаимодействовать с некоторыми моделями.

Когда я делаю GET-запрос к самому приложению с учетными данными Basic Auth, я получаю ответ 200 с содержимым (мне отказывают, если я не включаю учетные данные). Но когда я делаю запрос GET к конечной точке API DRF, я получаю 401 несанкционированный ответ. 401 предполагает, что ответ не проходит проверку подлинности.

Мой вопрос - почему (или как) вызов API-интерфейса, ориентированный на DRF, ищет учетные данные для аутентификации в другом месте, чем вызов самого приложения django (если это действительно происходит)?

Конфигурация Apache выглядит следующим образом:

DocumentRoot /var/www/html

LoadModule wsgi_module /usr/lib/apache2/modules/mod_wsgi.so

WSGIDaemonProcess portal python-home=/home/bio_admin/envs/dj python-path=/var/www/portal/html/bpp
WSGIScriptAlias /portal /var/www/portal/html/bpp/bioworks/wsgi.py process-group=portal
WSGIProcessGroup portal
WSGIPassAuthorization On

Alias /static/ /var/www/portal/html/bpp/static/

<Directory /var/www/portal/html>
AuthType Basic
AuthName "portal"
AuthUserFile "/var/www/portal/html/.htpasswd"
Require user bio_admin
Require ip 74.xxx.xxx.x
</Directory>

Часть DRF файла settings.py выглядит следующим образом:

REST_FRAMEWORK = {
    'DEFAULT_PERMISSION_CLASSES' : (
        'rest_framework.permissions.IsAuthenticated',
    ),
    'DEFAULT_AUTHENTICATION_CLASSES': (
        'rest_framework.authentication.BasicAuthentication',
    )
}

urls.py для конечной точки API, а также для конечной точки, которая возвращает 200 с правильным аутентификацией:

from rest_framework.urlpatterns import format_suffix_patterns
urlpatterns = [
path('projects/', views.ProjectsListView.as_view(), name='projects'),
path('api/projects/', views.projectListAPI.as_view())
]
urlpatterns = format_suffix_patterns(urlpatterns)

views.py класс для рассматриваемого API:

class projectDetailAPI(generics.RetrieveUpdateDestroyAPIView):
    queryset = Project.objects.all()
    serializer_class = ProjectSerializer
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...