LoginSignup
0
0

More than 3 years have passed since last update.

RemoteUserMiddlewareとDjango認証を併用する方法

Posted at

背景

前提記事:Django + Shibboleth with RemoteUserMiddleware

Shibboleth認証が通って、http://localhost/adminにアクセスできたと思ったら、Djangoのログインができない(そんなユーザー存在しないようなことを言われる)。

原因

公式ドキュメント曰く、

Be aware that this particular setup disables authentication with the default ModelBackend. This means that if the REMOTE_USER value is not set then the user is unable to log in, even using Django’s admin interface.

この設定は通常のModelsBackendによる認証を無効化してしまうので気を付けてください。例えば、REMOTE_USERがセットされていない場合、Django adminを含めてユーザーは全くログインできなくなってしまいます。

Adding 'django.contrib.auth.backends.ModelBackend' to the AUTHENTICATION_BACKENDS list will use ModelBackend as a fallback if REMOTE_USER is absent, which will solve these issues.

解決法としては、AUTHENTICATION_BACKENDS に'django.contrib.auth.backends.ModelBackend'を追加することによって、REMOTE_USERがセットされなかった場合のフォールバックとしてModelBackendを使用することができるようになります。

解決策

ModelBackendを追加。

settings.py
AUTHENTICATION_BACKENDS = (
    'django.contrib.auth.backends.RemoteUserBackend',
    'django.contrib.auth.backends.ModelBackend', # ←追加
)

参考:admin画面をShibbolethから除外したい

例えばドメインがhttp://localhost/だとすると、admin画面にアクセスするためのhttp://localhost/admin/でもShibboleth認証が動いてしまう。admin画面にアクセスする権限をShibboleth認証とは切り離したい場合は邪魔になる(現状では、Shibboleth認証でログインしてから、続けてDjangoの認証画面が出てくる)。

方策

アプリの特定のロケーションのみShibboleth管理下から外す。

httpd.conf
<Location /admin>
     AuthType None
     Require all granted
</Location>

<Location /static>
     AuthType None
     Require all granted
</Location>

注意<Location /admin/>(最後に'/'がついている)としてしまうと、http://localhost/admin(最後に'/'がない)はShibboleth認証の管理下に置かれてしまう

注意:admin画面で用いるcssファイルにShibboleth認証がかかってしまうのを防ぐため、/staticも管理下から外す必要がある。ただしこの設定では/staticは完全に公開されてしまうので、Djangoのログイン画面に関係のないコンテンツの画像などにもアクセスできるようになってしまい正直おすすめできない。本来は公開用のstaticを分けて設けるなどしたほうがよい。

以上。

0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0