从 Apache 对 Django 的用户数据库进行身份验证 — Django 文档
从 Apache 对 Django 的用户数据库进行身份验证
由于在处理 Apache 时保持多个身份验证数据库同步是一个常见问题,因此您可以将 Apache 配置为直接针对 Django 的 身份验证系统 进行身份验证。 这需要 Apache 版本 >= 2.2 和 mod_wsgi >= 2.0。 例如,您可以:
- 仅将静态/媒体文件直接从 Apache 提供给经过身份验证的用户。
- 针对具有特定权限的 Django 用户验证对 Subversion 存储库的访问权限。
- 允许某些用户连接到使用 mod_dav 创建的 WebDAV 共享。
笔记
如果您已安装 自定义用户模型 并希望使用此默认身份验证处理程序,则它必须支持 is_active
属性。 如果您想使用基于组的授权,您的自定义用户必须有一个名为“组”的关系,指的是具有“名称”字段的相关对象。 如果您的自定义不能符合这些要求,您还可以指定您自己的自定义 mod_wsgi auth 处理程序。
使用 mod_wsgi 进行身份验证
笔记
在以下配置中使用 WSGIApplicationGroup %{GLOBAL}
假定您的 Apache 实例仅运行一个 Django 应用程序。 如果您正在运行多个 Django 应用程序,请参阅 mod_wsgi 文档的 定义应用程序组 部分以获取有关此设置的更多信息。
确保 mod_wsgi 已安装并激活,并且您已按照步骤使用 mod_wsgi 设置 Apache。
接下来,编辑您的 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 在指定的 wsgi 脚本中执行 check_password
函数,传递它从提示中收到的用户名和密码。 在此示例中,WSGIAuthUserScript
与定义由 django-admin startproject 创建的应用程序 的 WSGIScriptAlias
相同。
使用 Apache 2.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
函数将 Apache 的身份验证与您站点的身份验证机制联系起来:
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/
开头的请求现在需要用户进行身份验证。
mod_wsgi 访问控制机制文档 提供了有关替代身份验证方法的其他详细信息和信息。