==================================== ``REMOTE_USER`` を使った認証 ==================================== :revision-up-to: 17812 (1.4) .. currentmodule:: django.contrib.auth.backends このドキュメントでは、 (Web サーバが環境変数 ``REMOTE_USER`` を設定するよう な環境で) Django から外部の認証ソースを利用する方法について解説します。 このタイプの認証がよく行われるのは、イントラネットサイトで IIS や Integrated Windows Authentication によるシングルサインオンを使う場合や、 Apache と ``mod_authz_ldap`` , `CAS`_, `Cosign`_, `WebAuth`_, `mod_auth_sspi`_ などを使う場合です。 .. _mod_authnz_ldap: http://httpd.apache.org/docs/2.2/mod/mod_authnz_ldap.html .. _CAS: http://www.jasig.org/cas .. _Cosign: http://weblogin.org .. _WebAuth: http://www.stanford.edu/services/webauth/ .. _mod_auth_sspi: http://sourceforge.net/projects/mod-auth-sspi 通常、 Web サーバが認証を行う場合、アプリケーション側には環境変数 ``REMOTE_USER`` がセットされて渡されます。 Django の中では、 ``REMOTE_USER`` は :attr:`request.META ` ア トリビュートから取り出せます。 :mod:`django.contrib.auth` モジュールの ``RemoteUserMiddleware`` や ``RemoteUserBackend`` クラスを使えば、 ``REMOTE_USER`` を利用するように Django を設定できます。 設定 ===== まず、 :setting:`MIDDLEWARE_CLASSES` 設定の中で、 :class:`django.contrib.auth.middleware.RemoteUserMiddleware` を :class:`django.contrib.auth.middleware.AuthenticationMiddleware` **よりも後に** 入れておきます:: MIDDLEWARE_CLASSES = ( ... 'django.contrib.auth.middleware.AuthenticationMiddleware', 'django.contrib.auth.middleware.RemoteUserMiddleware', ... ) 次に、 :setting:`AUTHENTICATION_BACKENDS` 設定の中の :class:`~django.contrib.auth.backends.ModelBackend` を ``RemoteUserBackend`` と置き換えます:: AUTHENTICATION_BACKENDS = ( 'django.contrib.auth.backends.RemoteUserBackend', ) これで、 ``RemoteUserMiddleware`` が ``request.META['REMOTE_USER']`` を使っ てユーザ名を検出し、 ``RemoteUserBackend`` の中で認証と自動ログインを行うよ うになります。 .. note:: ``RemoteUserBackend`` は ``ModelBackend`` を継承しているので、 ユーザは ``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`` を継承する 独自の認証バックエンドクラスを作成して、以下のメソッドをオーバライドしてく ださい: アトリビュート ~~~~~~~~~~~~~~~ .. attribute:: RemoteUserBackend.create_unknown_user ``True`` または ``False`` です。 :class:`~django.contrib.auth.models.User` のデータベースに該当ユーザが 存在しないときに、新たにユーザを作成するかどうかを決めるパラメタです。 デフォルトの値は ``True`` です。 メソッド ~~~~~~~~~ .. method:: RemoteUserBackend.clean_username(username) :class:`~django.contrib.auth.models.User` オブジェクトを取り出したり、新 たに作成したりするときに、(LDAP で DN 情報をはぎ取るといったような) オブ ジェクトの ``username`` のクリーニングを行うメソッドです。クリーニング済 みのユーザ名を返します。 .. method:: RemoteUserBackend.configure_user(user) 新たに作成したユーザの設定を行います。このメソッドは、新たにユーザが作成 された直後に呼び出されるので、ユーザのグループを LDAP 辞書から取り出すと いったような、独自のセットアップをを実行できます。ユーザオブジェクトを返 します。