【问题标题】:Django Rest Framework behind HTTP Basic AuthenticationHTTP基本身份验证背后的Django Rest框架
【发布时间】: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)?如果是这样,我应该怎么做?

任何帮助将不胜感激。

【问题讨论】:

    标签: django nginx django-rest-framework


    【解决方案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://stackoverflow.com/a/22697034/5687330

    【讨论】:

      猜你喜欢
      • 2015-08-16
      • 2014-01-31
      • 2013-06-29
      • 2017-09-26
      • 2017-11-02
      • 1970-01-01
      • 1970-01-01
      • 2016-02-04
      • 2019-03-01
      相关资源
      最近更新 更多