由于在处理Apache时保持多个身份验证数据库同步是一个常见问题,因此可以配置Apache以针对Django的 authentication system 直接。这需要Apache版本>=2.2和mod wsgi>=2.0。例如,您可以:
仅向经过身份验证的用户直接从Apache提供静态/媒体文件。
对访问进行身份验证 Subversion 拥有一定权限的django用户的存储库。
允许某些用户连接到使用创建的WebDAV共享 mod_dav.
备注
如果安装了 custom user model 如果要使用此默认身份验证处理程序,它必须支持 is_active
属性。如果要使用基于组的授权,则自定义用户必须具有名为“groups”的关系,该关系指的是具有“name”字段的相关对象。如果自定义不符合这些要求,也可以指定自己的自定义mod wsgi auth处理程序。
mod_wsgi
¶备注
WSGIApplicationGroup %{{GLOBAL}}
在下面的配置中,假设您的Apache实例只运行一个Django应用程序。如果您运行的是多个Django应用程序,请参阅 Defining Application Groups 有关此设置的详细信息,请参阅mod wsgi docs的部分。
确保mod_wsgi已安装并激活,并且您已按照步骤进行设置 Apache with mod_wsgi 。
接下来,编辑您的Apache配置以添加您希望只有经过身份验证的用户才能查看的位置:
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath /path/to/mysite.com
WSGIProcessGroup %{GLOBAL}
WSGIApplicationGroup %{GLOBAL}
<Location "/secret">
AuthType Basic
AuthName "Top Secret"
Require valid-user
AuthBasicProvider wsgi
WSGIAuthUserScript /path/to/mysite.com/mysite/wsgi.py
</Location>
这个 WSGIAuthUserScript
指令告诉mod wsgi执行 check_password
函数,传递从提示收到的用户名和密码。在这个例子中, WSGIAuthUserScript
和 WSGIScriptAlias
定义应用程序的 that is created by django-admin startproject .
使用带有身份验证的Apache2.2
确保 mod_auth_basic
和 mod_authz_user
载入。
这些可能被静态编译成Apache,或者您可能需要使用loadmodule在 httpd.conf
:
LoadModule auth_basic_module modules/mod_auth_basic.so
LoadModule authz_user_module modules/mod_authz_user.so
最后,编辑您的wsgi脚本 mysite.wsgi
通过导入 check_password
功能:
import os
os.environ["DJANGO_SETTINGS_MODULE"] = "mysite.settings"
from django.contrib.auth.handlers.modwsgi import check_password
from django.core.handlers.wsgi import WSGIHandler
application = WSGIHandler()
请求开始于 /secret/
现在需要用户进行身份验证。
MODYWSGI access control mechanisms documentation 提供有关其他身份验证方法的详细信息和信息。
7月 22, 2024