Django Rest Framework基本身份验证与Apache 2.4基本身份验证-我的API请求在哪里进行身份验证?

时间:2018-11-19 19:39:31

标签: django apache authentication django-rest-framework

我在Apache 2.4上托管的基本Django应用程序中集成了基本的DRF API。

在Apache配置中,我向本地服务器上的任何人提供对应用程序的授权/访问权限,并带有附加的基本身份验证设置(用于测试),以允许来自外部服务器的API调用与某些模型进行交互。

当我使用基本身份验证凭据向应用程序本身发出GET请求时,收到包含内容的200响应(如果我不包括凭据,则被拒绝)。但是,当我向DRF API端点发出GET请求时,会收到401未经授权的响应。 401提示响应未通过身份验证。

我的问题是-为何面向DRF的API调用(或如何)会在与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>

settings.py文件的DRF部分如下所示:

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

urls.py(用于api端点)以及返回具有正确auth的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

0 个答案:

没有答案