Apache 利用 Django 的用户数据库进行验证Link to this heading
使用 Apache 时,保持多个身份认证数据同步是一个常见的问题,你可以让 Apache 直接使用 Django 的 验证系统。这要求 Apache 版本 >= 2.2,且 mod_wsgi >= 2.0。例如这样:
仅为已授权的用户直接从 Apache 提供 static/media 文件。
仅为有特定权限的 Django 用户提供 Subversion 仓库访问。
允许某些用户连接到 mod_dav 创建的 WebDAV 共享。
用 mod_wsgi 进行授权认证Link to this heading
确保你已按照 Apache 配合 mod_wsgi 文档正确安装并激活了 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 在指定 wsgi 脚本中执行 check_password 函数,并传递从提示符获取的用户名和密码。在本例中, WSGIAuthUserScript 与 WSGIScriptAlias 一样,后者 由 django-admin startproject 创建,定义了应用。
最后,编辑 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 可达性控制机制文档 提供了其它授权机制和方法的更多细节和信息。