前回の記事でGeneXusでのSSO(シングルサインオン)の実装方法を書きましたが、今回はログアウトで全システムから一括でログアウトする方法を記載します。
※今回も前回同様GX18u10バージョンを使用しております。
またWWPを使用しますので、使用しない場合は少し設定が異なるかもしれません。
IDPの設定変更
今回設定を変えるところはIDP側で1箇所だけとなります。
IDPのログイン画面からログインしたら、メニューにある「GAMセキュリティ」をクリックしましょう。
(ログインID:admin、パスワード:admin123)
その後、GAMセキュリティのメニューからリポジトリ>構成を選択し全般のタブにある、GAMRemote のログアウト動作 (IDP)の設定を「クライアントのみ」から「IDプロバイダーおよびすべてのクライアント」に変更します。
これで設定は完了です。
動作確認
IDPにログイン後、SPの画面を開きます。
SSOが実装されているので、SPへのログインは不要となってます。
その後、IDPでログアウトします。
その後、SPで画面リフレッシュかけると、IDPログアウトしているのでログイン画面に飛ばされるはず。
あれ?ログイン画面に飛ばされませんね。
何回かブラウザリフレッシュしているんですけどね。
他の画面へ遷移もできてしまうし。
プログラム修正
色々調べた結果、ログアウト後に他の画面へリダイレクトしてはいけないということが分かりました。
ログアウト後に他の画面へリダイレクト?
そんなことしてないけどなぁと思いながらログアウト処理を見てみると、
Login画面へリダイレクトしていました。。。
(画面はWWP_MasterPageTopActionsWCになります)
どうやら「GAMRepository.Logout」でログアウトが実装されてて、そのあとに「Login()」でリダイレクトされてるとのことです。
なのでLogin()をコメントアウトしてあげます。
IDPとSP両方でコメントアウトしてください。
これで正常に動くはず。
再度動作確認
IDPにログイン後、SPの画面を開きます。
その後、IDPでログアウトします。
その後、SPで画面リフレッシュかけると、IDPでログアウトしているのでログイン画面に飛ばされるはず(リダイレクトもコメントアウトしましたし)
ログイン画面へ飛ばされました。
まとめ
無事に一括ログアウトも実装できて良かったです。
まさかWWPによって自動記述されているところが原因とは思いませんでした。
GeneXusのWikiを見ると一括ログアウトは日本語のWikiでは「GeneXus 15 Upgrade 11」で対応、英語のWikiを見ると「GeneXus 18 Upgrade 3」で対応とずれがあるんですけど、おそらくGeneXus 18 Upgrade 3だと思います。
多分もともとGeneXus 15 Upgrade 11で実装されてたんでしょうけど、バグか何かで動かなくて、正式に対応したのがGeneXus 18 Upgrade 3なのでしょう。
で、英語のWikiは修正したけど、日本語のWikiの修正が追いついてないのかな。
と、言うことで、GeneXus 18 Upgrade 3より前のバージョンをお使いの方はご注意ください。
これでSSOの実装は完了となります。