如何在Django中启用基本访问身份验证

特里

我想在我的Django项目中启用基本访问身份验证,如下所示:在此处输入图片说明

通过Google找到了此信息,并按照第一个答案更改了settings.py:

MIDDLEWARE_CLASSES = (
  ...

  'django.contrib.auth.middleware.AuthenticationMiddleware',
  'django.contrib.auth.middleware.RemoteUserMiddleware',

  ...
)

AUTHENTICATION_BACKENDS = (
  'django.contrib.auth.backends.RemoteUserBackend',
)

但是身份验证窗口没有出现。该项目仍处于调试模式,我通过运行它python ./manage.py runserver

私刑

我可以想到多种方法来做到这一点。如果您希望整个django应用程序都受到基本身份验证的保护,则可以向wsgi应用程序添加身份验证中间件。Django在您的项目中创建一个默认的wsgi应用程序。将以下中间件添加到此wsgi.py文件:

class AuthenticationMiddleware(object):
def __init__(self, app, username, password):
    self.app = app
    self.username = username
    self.password = password
def __unauthorized(self, start_response):
    start_response('401 Unauthorized', [
        ('Content-type', 'text/plain'),
        ('WWW-Authenticate', 'Basic realm="restricted"')
    ])
    return ['You are unauthorized and forbidden to view this resource.']
def __call__(self, environ, start_response):
    authorization = environ.get('HTTP_AUTHORIZATION', None)
    if not authorization:
        return self.__unauthorized(start_response)

    (method, authentication) = authorization.split(' ', 1)
    if 'basic' != method.lower():
        return self.__unauthorized(start_response)

    request_username, request_password = authentication.strip().decode('base64').split(':', 1)
    if self.username == request_username and self.password == request_password:
        return self.app(environ, start_response)

    return self.__unauthorized(start_response)

然后,而不是调用application = get_wsgi_application(),应使用:application = AuthenticationMiddleware(application,“ myusername”,“ mypassword”)

这将确保对django服务器的每个请求都经过基本身份验证。请注意,除非您使用HTTPS,否则基本身份验证是不安全的,并且用户凭据将不会被加密。

如果您只希望基本身份验证涵盖某些视图,则可以将上述类修改为函数装饰器:

def basic_auth_required(func):
@wraps(func)
def _decorator(request, *args, **kwargs):
    from django.contrib.auth import authenticate, login
    if request.META.has_key('HTTP_AUTHORIZATION'):
        authmeth, auth = request.META['HTTP_AUTHORIZATION'].split(' ', 1)
        if authmeth.lower() == 'basic':
            auth = auth.strip().decode('base64')
            username, password = auth.split(':', 1)
            if username=='myusername' and password == 'my password':
                return func(request, *args, **kwargs)
            else:
                return HttpResponseForbidden('<h1>Forbidden</h1>')
    res = HttpResponse()
    res.status_code = 401
    res['WWW-Authenticate'] = 'Basic'
    return res
return _decorator

然后,您可以以此来装饰视图以激活基本身份验证。

请注意,在上面的示例中,用户名/密码都是硬编码的。您可以用自己的机制替换它。

希望这可以帮助

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

如何在Django中启用基本访问身份验证

来自分类Dev

ASP.NET Web API 2-如何在默认VS 2013模板中启用基本身份验证?

来自分类Dev

在asp.mvc中处理请求之前,如何启用基本身份验证?(内部说明)

来自分类Dev

如何在Django REST Framework中禁用身份验证

来自分类Dev

贝宝基本访问身份验证中的网址无效

来自分类Dev

如何在Rest API中验证/检查基本身份验证标头

来自分类Dev

如何在Apache Tomcat Tribes集群中启用成员身份验证

来自分类Dev

如何在ASP.NET表单身份验证中启用多次登录尝试?

来自分类Dev

如何在Apache Tomcat Tribes集群中启用成员身份验证

来自分类Dev

如何在Bugzilla 4中启用带有身份验证的SMTP

来自分类Dev

如何在网络代理首选项中启用 SOCKS 5 身份验证

来自分类Dev

如何在 DNN 中实际启用 Twitter 或 Google 身份验证?

来自分类Dev

如何在基本身份验证中使用RestTemplate

来自分类Dev

访问基本身份验证凭据

来自分类Dev

Restlet如何在HTTP基本身份验证中解码机密

来自分类Dev

如何在DDEV-Local中向MailHog服务添加基本身份验证

来自分类Dev

如何使用django的基本访问身份验证将客户端登录到第三方网站

来自分类Dev

如何使未经身份验证的用户只能访问Django视图?

来自分类Dev

如何使未经身份验证的用户只能访问Django视图?

来自分类Dev

如何允许使用未经身份验证的请求访问Django Rest Framework中的某些视图?

来自分类Dev

如何在社交身份验证中存储Facebook的访问令牌

来自分类Dev

如何在 Laravel 中实现基于角色的身份验证和访问控制

来自分类Dev

在 Airflow 中启用 RDS 身份验证

来自分类Dev

使用用户实体进行身份验证时如何在Symfony 4中使用独立的基本身份验证

来自分类Dev

我无法在SOAPInput节点(Websphere Message Broker)中启用基本HTTP身份验证

来自分类Dev

在Elastic Beanstalk上的IIS中启用基本的HTTP身份验证?

来自分类Dev

HtmlUnitDriver:启用/禁用基本身份验证?

来自分类Dev

Rails中的基本用户身份验证

来自分类Dev

Rails 中的基本身份验证

Related 相关文章

  1. 1

    如何在Django中启用基本访问身份验证

  2. 2

    ASP.NET Web API 2-如何在默认VS 2013模板中启用基本身份验证?

  3. 3

    在asp.mvc中处理请求之前,如何启用基本身份验证?(内部说明)

  4. 4

    如何在Django REST Framework中禁用身份验证

  5. 5

    贝宝基本访问身份验证中的网址无效

  6. 6

    如何在Rest API中验证/检查基本身份验证标头

  7. 7

    如何在Apache Tomcat Tribes集群中启用成员身份验证

  8. 8

    如何在ASP.NET表单身份验证中启用多次登录尝试?

  9. 9

    如何在Apache Tomcat Tribes集群中启用成员身份验证

  10. 10

    如何在Bugzilla 4中启用带有身份验证的SMTP

  11. 11

    如何在网络代理首选项中启用 SOCKS 5 身份验证

  12. 12

    如何在 DNN 中实际启用 Twitter 或 Google 身份验证?

  13. 13

    如何在基本身份验证中使用RestTemplate

  14. 14

    访问基本身份验证凭据

  15. 15

    Restlet如何在HTTP基本身份验证中解码机密

  16. 16

    如何在DDEV-Local中向MailHog服务添加基本身份验证

  17. 17

    如何使用django的基本访问身份验证将客户端登录到第三方网站

  18. 18

    如何使未经身份验证的用户只能访问Django视图?

  19. 19

    如何使未经身份验证的用户只能访问Django视图?

  20. 20

    如何允许使用未经身份验证的请求访问Django Rest Framework中的某些视图?

  21. 21

    如何在社交身份验证中存储Facebook的访问令牌

  22. 22

    如何在 Laravel 中实现基于角色的身份验证和访问控制

  23. 23

    在 Airflow 中启用 RDS 身份验证

  24. 24

    使用用户实体进行身份验证时如何在Symfony 4中使用独立的基本身份验证

  25. 25

    我无法在SOAPInput节点(Websphere Message Broker)中启用基本HTTP身份验证

  26. 26

    在Elastic Beanstalk上的IIS中启用基本的HTTP身份验证?

  27. 27

    HtmlUnitDriver:启用/禁用基本身份验证?

  28. 28

    Rails中的基本用户身份验证

  29. 29

    Rails 中的基本身份验证

热门标签

归档