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_USER
は request.META
ア
トリビュートから取り出せます。 django.contrib.auth
モジュールの
RemoteUserMiddleware
や RemoteUserBackend
クラスを使えば、
REMOTE_USER
を利用するように Django を設定できます。
まず、 MIDDLEWARE_CLASSES
設定の中で、
django.contrib.auth.middleware.RemoteUserMiddleware
を
django.contrib.auth.middleware.AuthenticationMiddleware
よりも後に 入れておきます:
MIDDLEWARE_CLASSES = (
...
'django.contrib.auth.middleware.AuthenticationMiddleware',
'django.contrib.auth.middleware.RemoteUserMiddleware',
...
)
次に、 AUTHENTICATION_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
¶django.contrib.auth.backends.
RemoteUserBackend
¶認証メカニズムをより細かく制御したいなら、 RemoteUserBackend
を継承する
独自の認証バックエンドクラスを作成して、以下のメソッドをオーバライドしてく
ださい:
RemoteUserBackend.
clean_username
(username)¶User
オブジェクトを取り出したり、新
たに作成したりするときに、(LDAP で DN 情報をはぎ取るといったような) オブ
ジェクトの username
のクリーニングを行うメソッドです。クリーニング済
みのユーザ名を返します。
RemoteUserBackend.
configure_user
(user)¶新たに作成したユーザの設定を行います。このメソッドは、新たにユーザが作成 された直後に呼び出されるので、ユーザのグループを LDAP 辞書から取り出すと いったような、独自のセットアップをを実行できます。ユーザオブジェクトを返 します。
Oct 26, 2017