Moodle で Shibboleth 認証を用いたらリダイレクトループした件

Ubuntu上では少なくとも Shibboleth SP も Moodle もパッケージインストール出来、IdPからの属性情報 (Attributes) を Moodle に引きこむことが出来る。

念の為書いておくと、Moodle+SAMLの流れは以下の通り
  1. Moodle でログインするときにShibboleth SPを使うことを選ぶと
  2. Shibboleth SPがIdPに認証要求を出し
  3. IdP上で適切な認証が行われてAssertionが返されたら、
  4. SPがAssertionのAttributeを適切なidにそれぞれマッピングし
  5. 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とする)
[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
(他の原因である可能性もあるが、)手元でこのエラーを見たときには、既に存在しているローカルの認証とIdPから来たidが衝突した結果として上記のエラーが発生した。
  • Shibboleth SPから与えられるユーザ名と同じユーザ名で既にローカルのデータベースにアカウントがあると、
  • Shibboleth発のユーザ名を登録するときにローカルのそれとバッティングしてしまい、
  • ローカルのユーザ名についてのデータが優先され、
  • そのデータには「ローカル認証」というマークがされていて、
  • でもその「ローカル認証」は「Shibboleth のみによる認証を選んだ結果として」無効になっているので、
  • "Disabled Login"という理由で弾かれ、
  • Moodle上のShibboleth モジュールは「まだ認証していない」と勘違いするのでIdPにユーザをリダイレクトし、
  • IdPは認証済であることを知っているので即座にShibboleth SPにユーザをリダイレクトし、
  • 以下同じ
お手軽な対策はローカルのユーザを削除すること。

このブログの人気の投稿

WiiUのコントローラが通信不良に陥った話

LibreOfficeで表紙、目次、本体でフッターのページ番号のスタイルを変える

技術書典2 あ-03 『もわねっとのPythonの本』