如何從 Apache 驗證 Django 的使用者資料庫¶
由於在處理 Apache 時,保持多個驗證資料庫同步是一個常見的問題,您可以設定 Apache 直接根據 Django 的驗證系統進行驗證。這需要 Apache 版本 >= 2.2 和 mod_wsgi >= 2.0。例如,您可以
僅向已驗證的使用者直接從 Apache 提供靜態/媒體檔案。
使用具有特定權限的 Django 使用者驗證對Subversion儲存庫的存取。
允許某些使用者連線到使用mod_dav建立的 WebDAV 共用。
注意
如果您已安裝自訂使用者模型,並想使用此預設驗證處理程式,則它必須支援 is_active
屬性。如果您想要使用基於群組的授權,您的自訂使用者必須有一個名為「groups」的關係,指向具有「name」欄位的相關物件。如果您的自訂使用者無法符合這些要求,您也可以指定自己的自訂 mod_wsgi 驗證處理程式。
使用 mod_wsgi
驗證¶
注意
以下組態中使用 WSGIApplicationGroup %{GLOBAL}
假設您的 Apache 實例只執行一個 Django 應用程式。如果您正在執行多個 Django 應用程式,請參閱 mod_wsgi 文件中的定義應用程式群組章節,以取得有關此設定的更多資訊。
請確保 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 執行指定 wsgi 腳本中的 check_password
函式,並傳遞從提示收到的使用者名稱和密碼。在此範例中,WSGIAuthUserScript
與定義應用程式的 WSGIScriptAlias
相同,該應用程式是由 django-admin startproject 建立。
使用 Apache 2.2 進行驗證
請確保已載入 mod_auth_basic
和 mod_authz_user
。
這些可能會靜態編譯到 Apache 中,或者您可能需要在 httpd.conf
中使用 LoadModule 動態載入它們
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 存取控制機制文件提供了有關其他驗證方法的更多詳細資訊和資訊。