Moodle で Shibboleth 認証を用いたらリダイレクトループした件
Ubuntu上では少なくとも Shibboleth SP も Moodle もパッケージインストール出来、IdPからの属性情報 (Attributes) を Moodle に引きこむことが出来る。
念の為書いておくと、Moodle+SAMLの流れは以下の通り
さて、Shibboleth SPを用いて、emailベースのローカルの認証を使わない「SAMLのみの認証」を行うことも理屈上出来る。ただ、こういうエラーが発生して、SPとIdP間を行き来して「リダイレクトループ」を形成する問題が手元で起こった。/var/log/apache2/error.log には以下のようなログが発生する (ユーザ名をmowamowaとする)
念の為書いておくと、Moodle+SAMLの流れは以下の通り
- Moodle でログインするときにShibboleth SPを使うことを選ぶと
- Shibboleth SPがIdPに認証要求を出し
- IdP上で適切な認証が行われてAssertionが返されたら、
- SPがAssertionのAttributeを適切なidにそれぞれマッピングし
- Moodleはidに紐づられた値をMoodle内部の情報にさらにマッピングする
4までがSAMLの領分で、5さえなんとかすれば良い。詳細は/usr/share/moodle/auth/shibboleth/README.txt を読むこと。Shibboleth SPについては別のエントリを探すこと。
さて、Shibboleth SPを用いて、emailベースのローカルの認証を使わない「SAMLのみの認証」を行うことも理屈上出来る。ただ、こういうエラーが発生して、SPとIdP間を行き来して「リダイレクトループ」を形成する問題が手元で起こった。/var/log/apache2/error.log には以下のようなログが発生する (ユーザ名をmowamowaとする)
(他の原因である可能性もあるが、)手元でこのエラーを見たときには、既に存在しているローカルの認証とIdPから来たidが衝突した結果として上記のエラーが発生した。[Sun Jan 06 14:58:09 2013] [error] [client 192.168.40.52] [client 192.168.40.52] https://hansode.(yourhost)/moodle Disabled Login: mowamowa Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.11 (KHTML, like Gecko) Chrome/23.0.1271.97 Safari/537.11, referer: https://hansode.(yourhost)/moodle/login/index.php
- Shibboleth SPから与えられるユーザ名と同じユーザ名で既にローカルのデータベースにアカウントがあると、
- Shibboleth発のユーザ名を登録するときにローカルのそれとバッティングしてしまい、
- ローカルのユーザ名についてのデータが優先され、
- そのデータには「ローカル認証」というマークがされていて、
- でもその「ローカル認証」は「Shibboleth のみによる認証を選んだ結果として」無効になっているので、
- "Disabled Login"という理由で弾かれ、
- Moodle上のShibboleth モジュールは「まだ認証していない」と勘違いするのでIdPにユーザをリダイレクトし、
- IdPは認証済であることを知っているので即座にShibboleth SPにユーザをリダイレクトし、
- 以下同じ
お手軽な対策はローカルのユーザを削除すること。