我可以在Django中使用HTTP基本认证吗?

我们有一个运行在Apache上的网站,其访问通过HTTP基本认证保护了许多静态页面。

我使用Django构建了支持用户管理的Django,并使用Django编写了该网站的新部分。

我遇到的问题是用户必须通过HTTP Basic身份验证登录一次,然后再次使用Django登录表单登录。 这对用户来说既笨拙又令人困惑。

我想知道是否有人找到了让Django登录用户使用HTTP基本认证信息的方法。

我不希望将密码传递给Django,而是如果用户dave已经通过Apache认证,那么他们也应该自动以dave身份登录到Django。

(一种选择是让Apache和Django共享一个用户存储以确保通用的用户名和密码,但这仍然会涉及到两个登录提示,这是我试图避免的。)


这已添加到Django 1.3版本中。 在这里查看更多当前文档:http://docs.djangoproject.com/en/dev/howto/auth-remote-user/


对于仅支持基于某些请求的基本身份验证(而不是使用Web服务器 - 这可能是某人可能会解释问题标题的方式),您可能需要查看以下内容:

http://www.djangosnippets.org/snippets/243/


检查Oli的链接。 通过查看request.META ['REMOTE_USER'],您基本上可以看到通过基本HTTP身份验证在Django中验证的经过身份验证的用户名。

更新:测试建议的补丁#689,该补丁在telenieko的git仓库中最新发布。 它至少适用于Django的修订版9084。

通过激活远程用户认证后端

  • AuthenticationMiddleware之后添加RemoteUserAuthMiddleware
  • 添加设置AUTHENTICATION_BACKENDS = ('django.contrib.auth.backends.RemoteUserAuthBackend',)
  • 如果您像我一样使用lighttpd和FastCGI,请激活mod_auth,为测试用户创建凭据(我将其称为testuser并将123设置为密码),并将Django站点配置为需要基本身份验证。

    以下的urls.py可以用来测试设置:

    from django.conf.urls.defaults import *
    from django.http import HttpResponse
    from django.contrib.auth.models import User
    urlpatterns = patterns('',
        url(regex='^$',
            view=lambda request: HttpResponse(repr(request), 'text/plain')),
    
        url(regex='^user/$',
            view=lambda request: HttpResponse(repr(request.user), 'text/plain')),
    
        url(regex='^users/$',
            view=lambda request: HttpResponse(
                ','.join(u.username for u in User.objects.all()),
                'text/plain')),
    )
    

    重新加载lighty和Django FCGI服务器后,加载站点的根目录现在要求进行身份验证并接受testuser凭据,然后输出请求对象的转储。 在request.META中,这些新属性应该存在:

    'AUTH_TYPE': 'Basic'
    'HTTP_AUTHORIZATION': 'Basic dGVzdHVzZXI6MTIz'
    'REMOTE_USER': 'testuser'
    

    /user/ URL可用于检查您是否确实以testuser身份登录:

    <User: testuser>
    

    /users/ URL现在列出了自动添加的testuser (这里是我在创建syncdb时创建的admin用户):

    admin,testuser
    

    如果您不想修补Django,将RemoteUserAuthBackendRemoteUserAuthMiddleware类分离到一个单独的模块并在Django设置中引用它是很简单的。

    链接地址: http://www.djcxy.com/p/33739.html

    上一篇: Can I use HTTP Basic Authentication with Django?

    下一篇: Getting session info from subdomains to the parent domain [Django]