学認FPSP(Filter Per SP)の改良


(この内容は、学認メーリングリストで、オープンソース・ソリューション・テクノロジの相本様、辻口様からいただいたアドバイスやパッチを含んだ内容となっています)

学認FPSPとは

学認は認証インフラとしてShibbolethを利用しているのですが、Shibbolethは認証と認可をIdPとSPとに完全に分離しているため、属性によってユーザが利用できないSPを利用しようとすると、次のような行動パターンになってしまいます。

  1. SPのサイトで自IdPを選択
  2. IdPでユーザ名とパスワードを入力してログイン
  3. SPのサイトに戻ってそこで利用を断られる

認証と認可の分離という観点から言えばこれは正しいといえるのですが、通常の1サイトで完結したアプリケーションの利用者にとっては今ひとつわかりにくいのも事実です。

また、本来であればSP側でユーザ属性に基づいて認可を行ってほしいのに、ユーザ属性が何であっても受け入れてしまうSPもあります(なおかつ、そのまま利用するとソフトウェアライセンス違反になってしまうものもあります)。

このような問題を解決するには、IdP側である程度の認可情報を管理し、SPに移動する前に制御を行いたいと思うのですが、そのような目的に利用できるものとしてFPSP(Filter Per SP)というツールが提供されています。

FPSPの問題点

ところが実際のところ、このFPSPを利用してみると色々と問題があります。バグといえる問題点としては、

  • 一旦FPSPでログインを拒絶されると、その後シングルサインオン自体が無効となり、他のSPにもログインできなくなる(ブラウザを終了させるか、タイムアウトを待たないと他のSPが利用できない)
  • 実は、FPSPに設定されたサイトにアクセスしてIdPを選択すると、そこでログインしなくても他のSPにログインできなくなる

仕様上の問題といえる点としては、

  • SPが要求しない属性でフィルタできないため、先程述べたような、SPが必要な属性を要求せずに認めてしまっているサイトへの移動をフィルタできない

が挙げられます。

もともと、SampleFilterPerSP.javaという名前からしてちゃんとした実装でない気配はあるのですが、それにしてもこのような状態なので、とても実用的とは言いがたいものです。

改良版FPSPと利用法

これらの問題を解決したSampleFilterPerSP.javaがこちらです。

fpsp.zip(3KB)

これをFPSPのSampleFilterPerSP.javaと入れ替えると、上記のバグと問題点が解消される上、新機能も追加されます。具体的には次のようになります。

  • FPSPでフィルタされた後も、他サイトへのシングルサインオンは継続できる
  • SPが要求しない属性もフィルタ対象にできる
  • 未契約のSPなど、一切そのIdPから利用できないサイトを利用しようとした場合は別のエラーメッセージを表示できる
  • (細かい話ですが)一つも<EntityDescriptor/>を含まない<EntitiesDescriptor/>と、一つも<Attribute/>を含まない<EntityDescriptor/>を文法的に許すようにした

たとえば学生用DreamSparkを、学生以外利用できないように設定する場合は、SampleFiterPerSP_allow.xmlに次のように設定します(これは通常のFPSPと文法的には同じ設定ですが、通常のFPSPだとこの設定は機能しません)。

Researchmapを学認経由で利用しないようにしたい場合は次のように設定します。

なお、この拡張にともなって設定ファイルSampleFilterPerSP_allow.xmlのDTDが更新されています。XMLファイル冒頭のDTDの部分を次のように書き換えてご利用ください。

また、ブラウザに表示されるエラーメッセージはSampleFilterPerSP.javaの中に書かれていますので、不満であれば修正して利用してください。

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です