REMOTE_USER を使った認証

revision-up-to:17812 (1.4)

このドキュメントでは、 (Web サーバが環境変数 REMOTE_USER を設定するよう な環境で) Django から外部の認証ソースを利用する方法について解説します。 このタイプの認証がよく行われるのは、イントラネットサイトで IIS や Integrated Windows Authentication によるシングルサインオンを使う場合や、 Apache と mod_authz_ldap , CAS, Cosign, WebAuth, mod_auth_sspi などを使う場合です。

通常、 Web サーバが認証を行う場合、アプリケーション側には環境変数 REMOTE_USER がセットされて渡されます。 Django の中では、 REMOTE_USERrequest.META ア トリビュートから取り出せます。 django.contrib.auth モジュールの RemoteUserMiddlewareRemoteUserBackend クラスを使えば、 REMOTE_USER を利用するように Django を設定できます。

設定

まず、 MIDDLEWARE_CLASSES 設定の中で、 django.contrib.auth.middleware.RemoteUserMiddlewaredjango.contrib.auth.middleware.AuthenticationMiddleware よりも後に 入れておきます:

MIDDLEWARE_CLASSES = (
    ...
    'django.contrib.auth.middleware.AuthenticationMiddleware',
    'django.contrib.auth.middleware.RemoteUserMiddleware',
    ...
    )

次に、 AUTHENTICATION_BACKENDS 設定の中の ModelBackendRemoteUserBackend と置き換えます:

AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.RemoteUserBackend',
)

これで、 RemoteUserMiddlewarerequest.META['REMOTE_USER'] を使っ てユーザ名を検出し、 RemoteUserBackend の中で認証と自動ログインを行うよ うになります。

Note

RemoteUserBackendModelBackend を継承しているので、 ユーザは ModelBackend の定義しているパーミッションチェックをすべてパ スする必要があります。

認証メカニズムが REMOTE_USER 以外のカスタムの HTTP ヘッダを使っていてい る場合には、以下の例のように、 RemoteUserMiddleware をサブクラス化して、 クラスの header アトリビュートを適切な request.META のキー名に設定 してください:

from django.contrib.auth.middleware import RemoteUserMiddleware

class CustomHeaderMiddleware(RemoteUserMiddleware):
    header = 'HTTP_AUTHUSER'

RemoteUserBackend

class django.contrib.auth.backends.RemoteUserBackend

認証メカニズムをより細かく制御したいなら、 RemoteUserBackend を継承する 独自の認証バックエンドクラスを作成して、以下のメソッドをオーバライドしてく ださい:

アトリビュート

RemoteUserBackend.create_unknown_user

True または False です。 User のデータベースに該当ユーザが 存在しないときに、新たにユーザを作成するかどうかを決めるパラメタです。 デフォルトの値は True です。

メソッド

RemoteUserBackend.clean_username(username)

User オブジェクトを取り出したり、新 たに作成したりするときに、(LDAP で DN 情報をはぎ取るといったような) オブ ジェクトの username のクリーニングを行うメソッドです。クリーニング済 みのユーザ名を返します。

RemoteUserBackend.configure_user(user)

新たに作成したユーザの設定を行います。このメソッドは、新たにユーザが作成 された直後に呼び出されるので、ユーザのグループを LDAP 辞書から取り出すと いったような、独自のセットアップをを実行できます。ユーザオブジェクトを返 します。