先日GeneXusでのシングルサインオンの実装について質問がありましたので、記事にしようと思います。
※今回はGX18u10バージョンを使用しております。
またWWPを使用しますので、使用しない場合は少し設定が異なるかもしれません。
シングルサインオンとは
まずシングルサインオン(以下SSO)とは何か理解しておきましょう。
SSOとは、一度ログインすれば複数のサービスやアプリケーションに自動的にログインできる仕組みです。
イメージ化すると下記のような感じです。
SSOを実装していないシステムの場合は、それぞれのWebシステムに入るごとにログインしなくてはいけません。
それに対してSSOを実装している場合は、1つのシステムに入る時に1回ログインをすれば、ブラウザを落とさなければ別のシステムには再度ログインが不要になります。
今回はGeneXusで2つのWebシステムを作って、SSOを実装してみます。
まず1つ目のシステムをIdentify Provider(以下IDP)とし2つ目のシステムをService Provider(以下SP)とします。
SSOを実装する時は必ず、IDPとSPを用意してください。
IDP1つに対して、SPは複数あっても構いません。
IDPのナレッジベースを作成
まずはじめにIDPのナレッジーベースを作成します。
名前は「IDP」にしました。
(今回はC#で作りましたが、Javaでも同様になります)
続きましてWWPを適用します。
どんなパターンを選択しても問題ないですが、SSOを使用するために「GAMセキュリティを含める」にチェックを付けてください。
詳細設定を行う場合も同様にGAMを選択してください。
WorkWithPlusが適用できたら、DBの設定を完了させて「すべてリビルド」をします。
途中、GAMのDB作成や再編成が出ますが作成してください。
ビルドが終わり、ログイン画面を開き、ログインできたらOKです。
IDPログイン画面
WWPのパターン適用で、IDPのテーマカラーは「紫」にしました。
SPのナレッジベースを作成
IDPと同様にSPのナレッジベースも作成します。
名前は「SP」としました。
こちらもWorkWithPlusを適用して、すべてリビルドを行います。
(IDPと異なる点はありません。)
SPログイン画面
WWPのパターン適用で、SPのテーマカラーは「黄色」にしました。
IDPの画面からSPの画面を呼ぶ
SSOを実装する前に、IDPの画面からSPの画面を呼ぶボタンを置いて押下します。
SSOを実装していないので当然SPの画面でもログインが求められますね。
さて、これがSSOを実装するとどうなるかですね。
IDPのGAM設定
IDPのログイン画面からログインしたら、メニューにある「GAMセキュリティ」をクリックしましょう。
(ログインID:admin、パスワード:admin123)
その後、GAMセキュリティのメニューからアプリケーションを選択し「追加」ボタンを押下します。
下記の赤枠の部分を変更します。
名前:任意の名前
Web認証を許可:チェック
ローカルログインの URL:http://ホスト名/BaseURL/gamremotelogin.aspx
(http://localhost/IDPNETFrameworkSQLServer/gamremotelogin.aspx)
コールバックURL:SP側のURL
(http://localhost/SPNETFrameworkSQLServer)
※クライアントIDとクライアントシークレットは登録時に自動的にセットされます。
SPのGAM設定ではそちらを使用します。
設定できましたら確認を押して登録しましょう。
SPのGAM設定
続きましてSPのログイン画面からログインして、GAMセキュリティの画面を開きましょう。
その後、設定 > 認証タイプの画面からADDを押下し、GAM Remoteを選択します。
下記の赤枠の部分を変更します。
名前:任意
関数:認証のみ
有効化済み:チェック
クライアント ID:IDPのクライアントID
クライアントシークレット:IDPのクライアントシークレット
ローカルサイト URL (コールバック URL):IDPで設定したコールバックのURL
gam_user_data:チェック
リモートサーバーの URL:IDPで設定したローカルログインの URL
設定できましたら確認を押して登録しましょう。
SPの動作確認
SPのログイン画面を開くと下に鍵マークが表示されております。
こちらの鍵マークをクリックするとIDPのログイン画面が表示されます。
admin/admin123でログインします。
SP側にSSOで入った場合の権限を設定していなかったため、権限エラーになりました。
SPにSSOの権限付与
SPのログイン画面からログインして、GAMセキュリティの画面を開きましょう。
その後、ユーザーの画面から認証がSSOのadminのロールをクリック。
追加ボタンを押して、Administratorを追加しましょう。
再度SPの動作確認
SPのログイン画面から鍵マークをクリックしてIDPのログイン画面を表示させます。
admin/admin123でログインします。
無事にSP側に入ることができました。
IDPからSPの画面へ遷移
IDPにログイン後、SPのホームに遷移するボタンを押してみます。
一回SPのログイン画面に飛ばされますが、鍵マークをクリックするとIDPのログインを経由せず、SPの画面に入れました。
次はSPのログイン画面を経由しないように設定しましょう。
SPのログイン画面をSSOのログイン画面に変更
GeneXusの「設定」で「Login Object for Web」をLoginからGAMSSOLoginと言うオブジェクトに変更しビルドします。
再度IDPからSPの画面へ遷移
IDPにログインしSP画面への遷移ボタンをクリック
無事にログイン画面を経由せず、SP画面へ遷移することができました。
まとめ
設定自体は簡単だったが、まとめると思ったより長くなってしまいました。
ただ1つのシステムにログインすれば、別のシステムにはログイン不要で入れるのは良いですね。
ログアウトに関しましては、今の設定だと各システム個別でのログアウトになっておりますので、次回は1つのシステムでログアウトしたら一括ログアウト出来る方法をまとめようと思います。
追記
SSOの一括ログアウトの件は記載しました。
GeneXusのSSO一括ログアウトについて
以上です。