revision-up-to: | 17812 (1.4) |
---|
Warning
mod_python のサポートは、 Django で廃止予定です。廃止された時点で、 認証用のメソッドは Django で提供されなくなります。コミュニティーとして は、 WSGI ミドルウェアやその他のアプローチを使用した代替案を提案して います。
Apache を使っていると、同期を保ちながら複数の認証データベースを維持するとい う問題によくぶつかります。 Apache の認証を Django の 認証システム で行えば、以下のような処理を実現できます:
Django の認証データベースを Apache 設定ファイルからチェックするには
mod_python の標準の Auth*
および Require
ディレクティブと共に、
PythonAuthenHandler
ディレクティブを使います:
<Location /example/>
AuthType Basic
AuthName "example.com"
Require valid-user
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonAuthenHandler django.contrib.auth.handlers.modpython
</Location>
Apache 2.2 で認証ハンドラを使う場合
Apache 2.2 を使っている場合には、あと 2 ステップほど作業が必要です。
まず、 mod_auth_basic
と mod_authz_user
をきちんとロードさせね
ばなりません。これらのモジュールは、 Apache のコンパイル時に静的に組み
込まれているか、 LoadModule
を使って動的に組み込みます (この囲みの
末尾に例があります) 。
また、 Apache が他の認証用モジュールを使おうとしないように、設定のため
のディレクティブを挿入しておき、 AuthUserFile
を /dev/null
に指
定しておく必要があります。ロードした認証モジュールによって、以下のいず
れか、または複数のディレクティブが必要です:
AuthBasicAuthoritative Off
AuthDefaultAuthoritative Off
AuthzLDAPAuthoritative Off
AuthzDBMAuthoritative Off
AuthzDefaultAuthoritative Off
AuthzGroupFileAuthoritative Off
AuthzOwnerAuthoritative Off
AuthzUserAuthoritative Off
Apache 2.2 での設定全体を、2.0 との違いを太字にして示します:
LoadModule auth_basic_module modules/mod_auth_basic.so LoadModule authz_user_module modules/mod_authz_user.so ... <Location /example/> AuthType Basic AuthName "example.com" AuthUserFile /dev/null AuthBasicAuthoritative Off Require valid-user SetEnv DJANGO_SETTINGS_MODULE mysite.settings PythonAuthenHandler django.contrib.auth.handlers.modpython </Location>
デフォルトでは、認証ハンドラは staff のマークのついたメンバだけに
/example/
へのアクセスを制限します。この挙動を変更したければ、
以下の PythonOption
ディレクティブを使います:
PythonOption |
説明 |
---|---|
DjangoRequireStaffStatus |
デフォルトの設定値は |
DjangoRequireSuperuserStatus |
デフォルトの設定値は |
DjangoPermissionName |
アクセスに必要なパーミッションの名前 です。詳しくは カスタムのパーミッション を参照 してください。 デフォルトの設定では、 特定のパーミッションを必要としません。 |
場合によって、 SetEnv
が mod_python の設定としてうまく働きません。
この原因はよくわかっていません。 mod_python が DJANGO_SETTINGS_MODULE
をうまく認識できない場合、 SetEnv
の代りに PythonOption
を使ってみ
て下さい。以下の二つのディレクティブは同じ意味です:
SetEnv DJANGO_SETTINGS_MODULE mysite.settings
PythonOption DJANGO_SETTINGS_MODULE mysite.settings
Oct 26, 2017