ApacheからのDjangoのユーザーデータベースに対する認証—Djangoのドキュメント

提供:Dev Guides
< DjangoDjango/docs/3.2.x/howto/deployment/wsgi/apache-auth
移動先:案内検索

ApacheからのDjangoのユーザーデータベースに対する認証

複数の認証データベースの同期を維持することはApacheを扱う際の一般的な問題であるため、Djangoの認証システムに対して直接認証するようにApacheを構成できます。 これには、Apacheバージョン> = 2.2およびmod_wsgi> = 2.0が必要です。 たとえば、次のことができます。

  • 静的/メディアファイルをApacheから認証されたユーザーにのみ直接提供します。
  • 特定の権限を持つDjangoユーザーに対して Subversion リポジトリへのアクセスを認証します。
  • 特定のユーザーが mod_dav で作成されたWebDAV共有に接続できるようにします。

ノート

カスタムユーザーモデルをインストールしていて、このデフォルトの認証ハンドラーを使用する場合は、is_active属性をサポートする必要があります。 グループベースの承認を使用する場合、カスタムユーザーには、「name」フィールドを持つ関連オブジェクトを参照する「groups」という名前のリレーションが必要です。 カスタムがこれらの要件に準拠できない場合は、独自のカスタムmod_wsgi認証ハンドラーを指定することもできます。


mod_wsgiによる認証

ノート

以下の構成でWSGIApplicationGroup %{GLOBAL}を使用することは、Apacheインスタンスが1つの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と同じです。

認証でのApache2.2の使用

mod_auth_basicmod_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 アクセス制御メカニズムのドキュメントは、認証の代替方法に関する追加の詳細と情報を提供します。

mod_wsgiおよびDjangoグループによる承認

mod_wsgiは、特定の場所をグループのメンバーに制限する機能も提供します。

この場合、Apacheの構成は次のようになります。

WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py

WSGIProcessGroup %{GLOBAL}
WSGIApplicationGroup %{GLOBAL}

<Location "/secret">
    AuthType Basic
    AuthName "Top Secret"
    AuthBasicProvider wsgi
    WSGIAuthUserScript /path/to/mysite.com/mysite/wsgi.py
    WSGIAuthGroupScript /path/to/mysite.com/mysite/wsgi.py
    Require group secret-agents
    Require valid-user
</Location>

WSGIAuthGroupScriptディレクティブをサポートするには、同じWSGIスクリプトmysite.wsgiが、指定されたユーザーが属するリストグループを返すgroups_for_user関数もインポートする必要があります。

from django.contrib.auth.handlers.modwsgi import check_password, groups_for_user

/secret/のリクエストでは、ユーザーが「secret-agents」グループのメンバーである必要もあります。