ログアウト処理は,ローカルログアウトとグローバルログアウトに大別できます.前者は,SPのセッションを削除するもので,IdPや他のSPのログアウトとは連動しません.後者は,IdPとしてもログアウト処理を施し,全てのSPからログアウトする,すなわち,シングルログアウト(Single Logout : SLO)を意味します.
ここでは,ローカルログアウトの設定方法について説明します(現在シボレスでは,IdP側においてグローバルログアウト機能が提供されていません).
※Shibboleth IdPバージョン3.2で、グローバルログアウトの機能が提供されるようになりました。学認でいますぐに使っていただける状況ではありませんが、IdP側とのネゴシエーションにより個々のIdP-SPの組み合わせで機能させることは可能です。詳細はお問い合わせください。また、本ページ末尾の参考ドキュメントもご参照ください。
※Shibboleth IdPバージョン2.4には、SLOの一部(前半部分、つまりSPのログアウトをトリガーとしてIdPのほうでもログアウトする)のための機能が追加されました。
※Shibboleth SPは昔からグローバルログアウトに対応しています。つまり、SPでのログアウトをIdPに伝えることが可能、かつIdPからのログアウト指示でSPからログアウトすることが可能です。ただしアプリケーションで独自のセッション管理をしている場合はそのままでは動きませんので、詳しくは本ページ末尾のFull SLOのドキュメントをご参照ください。
アプリケーション側の設定
ログアウトボタンが押され,アプリケーション側のログアウト処理を終えた後に,/Shibboleth.sso/Logoutにリダイレクトし,SP のLogoutInitiatorを動作させます.returnパラメータを設定することで,ログアウト後のリダイレクト先を指定できます.
なお、returnパラメータについてデフォルトでは制限がかかっておりませんので、以下の手順を参考に制限することをお勧めします。
GakuNinShare - 設定・運用・カスタマイズ - オープンリダイレクタとなりうる問題の対処
例:
shibboleth2.xmlの設定
下記のようにtype=”SAML2”のLogoutInitiatorをコメントアウトすることで,IdP側で対応していないグローバルログアウトを実行させない設定にします.type=”Local”がローカルログアウトのための処理を実行し,当該SPに関するログインセッションを削除します.アプリケーション側で,/Shibboleth.sso/Logoutへのリダイレクト時にreturnパラメータが設定されていない場合は,localLogout.htmlが表示されます.
参考:https://wiki.shibboleth.net/confluence/display/SHIB2/NativeSPLogoutInitiator
関連するQ&A: [Shib-Users] Questions about the Logout initiator redirect(Shibboleth Usersメーリングリスト内)
グローバルログアウトへの対応:
- SP側
- IdP側
- GakuNinShare - Shibboleth IdP 3 -
- 旧: Shibboleth IdP 2.4.x向け(Async SLO):
- GakuNinShare - Shibboleth IdP 3 -