Single Sign On への遠い道

最近、redmine に興味を持って、あれこれ試していたのだが、こういった Web ベースのアプリケーションのユーザ管理や認証に関して不満が多い。

確かに、さくっと入れてみて試す、とか、ちょっとしたグループで使ってみる、という時に敷居が低いメリットはあるのだが、本格的に使おうと思うと、「あっちのアカウントのパスワードってなんだったけ?」ということになりかねない。

ブラウザの機能で覚えさせるのも一つの手ではあるが、管理する側からすると、どこか一箇所でアカウント管理できる方がありがたい。人が増えた、減ったで、あっちこっちもとやるのは面倒だし、「パスワード忘れたから...」というのも減らしたい。

そう意味で現実的なのは、Active Directory を使うことだが、全部を Microsoft 製品にする覚悟があれば別だが、「あっ、これ便利そう」と思うような Web ベースのアプリは漏れてしまう。

実は、Web ベースでも、Web サーバ <-> ブラウザ間は選択肢があって、Web サーバが LinuxApache、なんて場合でも、ブラウザが IE でなくて、FirefoxSafari でも NTLM 認証や SSPI 認証が使えたりする。

ところが、Web サーバ上で実行されるアプリ側が対応していない。ほとんどは、自前でデータベース上にアカウント情報を持って付き合わせる。ブラウザ自体は Single Sign On しても、その中でさらに認証が必要になってしまう。

redmine で調べていたら、この部分を書き換えると、Web サーバに認証されて REMOTE_USER にセットされるものを使えるようになる、ということを書いているところを見つけた。

http://www.redmine.org/boards/2/topics/show/127

これであれば、何で認証するかは Web サーバ側に任せる事ができ、アプリ側がとやかく対応する必要はなくなる。

ただ、これは redmine では、そういったことが簡単に改修できるようになっていた、という話であって、例えば、どんな Rails アプリでも同じ改修が出来る、とは限らない。

意外なぐらいに、こういった配慮がされている Web アプリは少ない気がする。また、認証が必要などんなアプリでも、同様のことは考えられる。やるべき事は、

  • Web アプリ側は REMOTE_USER が設定されていたら、そのユーザは認証されているものとして扱う。
  • REMOTE_USER が設定されていなかったら、独自の認証画面に飛ばすか、拒否をする。

ということだけだと思うのだが、そういったことって、フレームワーク側で普通に用意できないものかなぁ。

よく、「LDAP で認証を統一」といった話があるが、あれは Single Sign On ではなくて、あくまでも、アカウント情報を1つにまとめるだけ。Active Directory や Kerberos や NTLM にアプリ側が個別に対応するのは面倒だし、現実に Web サーバ側で実装できる場合が多いのだから、それを使わない手は無いと思うのだが...。