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 Framework:未提供身份验证凭据