HTTP基本身份验证背后的Django Rest框架

Posted

技术标签:

【中文标题】HTTP基本身份验证背后的Django Rest框架【英文标题】:Django Rest Framework behind HTTP Basic Authentication 【发布时间】:2013-11-10 16:28:36 【问题描述】:

如果我的网络服务(由 Django Rest Framework v2.3.8 提供支持)位于受 nginx 的 HTTP 基本身份验证保护的位置,如下所示:

location / 
            auth_basic           "Restricted access";
            auth_basic_user_file /path/to/htpasswd;

            uwsgi_pass django;
            include /etc/uwsgi/config/uwsgi_params;
    

然后,当用户进行身份验证并尝试访问 API 时,所有视图都会获得以下响应:

"detail": "Invalid username/password"

即使视图不需要身份验证,Django Rest Framework 是否会获取 HTTP 授权标头(用于 Nginx)?如果是这样,我应该怎么做?

任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

默认情况下,Django Rest Framework 有两个身份验证类,请参阅here。

REST_FRAMEWORK = 
'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.SessionAuthentication',
    'rest_framework.authentication.BasicAuthentication'
)

如果您不需要,您可以禁用其余框架身份验证。

REST_FRAMEWORK = 
    'DEFAULT_AUTHENTICATION_CLASSES': ()

或者您可以只删除 BasicAuthentication,因为它适用于您的情况。

REST_FRAMEWORK = 
'DEFAULT_AUTHENTICATION_CLASSES': (
    'rest_framework.authentication.SessionAuthentication'
)

【讨论】:

出于安全原因不要禁止默认安全设置 这个答案有效。您可以在需要安全性时调整应用程序的安全性。【参考方案2】:

如另一篇文章中所述,您必须在身份验证类旁边添加一个逗号,否则它可能会引发 TypeError。

'DEFAULT_PERMISSION_CLASSES': (
    'rest_framework.authentication.SessionAuthentication', #comma added here
)

来源:https://***.com/a/22697034/5687330

【讨论】:

以上是关于HTTP基本身份验证背后的Django Rest框架的主要内容,如果未能解决你的问题,请参考以下文章

运行时单元测试 Django Rest Framework 身份验证

django rest 框架身份验证

通过 SSL 和 HTTP 基本身份验证的 REST 服务

Django Rest Framework:未提供身份验证凭据

Django Rest Framework api如何为所有人添加身份验证权限

Spring-Boot REST 服务基本 http 身份验证排除一个端点