5.3.3.11. iAP-iWP間SSO連携(IM-HybridSSO)¶
intra-mart Accel Platform(以下 iAP と記述します)と iWP / iAF v7.2 (以下 iWP と記述します)の間で、 シングルサインオン(以下 SSO と記述します)連携するための機能(IM-HybridSSO)の設定方法について説明します。注意
IM-HybridSSO は、2014 Summer(Honoka) から利用することが可能です。注意
IM-HybridSSO の iWP用のモジュールは、patch8 で提供されました。iWP の patch7 で IM-HybridSSO を利用するためには、別途個別パッチモジュールをインストールする必要があります。個別パッチモジュールは、以下の URL からダウンロード可能です。※ダウンロードには製品のライセンスキーが必要です。該当のファイルを解凍し、展開された readme.txt を参照してインストールおよび設定を行ってください。なお、上記個別パッチモジュールを適用し、その後 patch8 の適用を行う場合、patch8 の適用によって一部設定ファイルが初期化されるためSSO連携が行えなくなります。必ず patch8 の readme.txt を参照した上でパッチの適用を行ってください。注意
5.3.3.11.1. 概要¶
5.3.3.11.1.1. IM-HybridSSO とは¶
IM-HybridSSO とは、iAP と iWP の間で、SSO 連携するための機能です。iWP の認証情報の管理と、外部メニュー連携を利用して取得したメニューからのアクセス時に iWP へ自動的にログインすることにより実現されます。これにより、iAP と iWP のサービスをシームレスに利用することが可能です。外部メニュー連携については、「 外部メニュー連携とは 」を参照してください。IM-HybridSSO を利用するためには、外部メニュー連携の設定が必要です。「 IM-HybridSSO の設定 」では、IM-HybridSSO と外部メニュー連携の設定を併せて行いますので、手順に沿って設定を行ってください。
5.3.3.11.1.3. IM-HybridSSO の機能¶
IM-HybridSSO は、以下の機能により実現されます。
認証情報の管理
iAP にログインすることで、iWP にログイン確認を行い、 ログイン可能な場合は、ブラウザの Cookie に認証情報を保存します。SSO自動ログイン
外部メニュー連携で取得した外部メニューからアクセスすることで、Cookie の認証情報を利用して iWP に自動的にログインし、該当のページを表示します。ログアウト連携
iAP からログアウトすることで、連携している全ての iWP からログアウトし、Cookie から認証情報を削除します。IM-HybridSSO では、iAP にログインしたユーザのユーザコードを利用して iWP にログインします。iWP に同一のユーザコードのユーザが存在しない場合は、SSO連携できません。iAP と iWP のアカウント情報を同期するためには、マスタ情報の同期機能の BackwardSync が利用可能です。BackwardSync については「 BackwardSync(version 7.2へのマスタ同期)仕様書 」、および、「 BackwardSync(version 7.2へのマスタ同期)操作ガイド 」を参照してください。
5.3.3.11.2. IM-HybridSSO の設定¶
5.3.3.11.2.1. iWP の設定¶
5.3.3.11.2.1.1. SSO自動ログインの設定¶
IM-HybridSSO によるSSO自動ログインを有効にするため、以下の設定を行います。注意
修正内容の位置に正しく設定を追加してください。設定箇所が間違っている場合、正常に動作しません。
メニューサーブレットにフィルタを追加します。
設定ファイル
<%ApplicationRuntime のインストールパス% /doc/imart/WEB-INF/web.xml>
修正内容
: <filter> <filter-name>HTTPContextHandlingFilter</filter-name> <filter-class>jp.co.intra_mart.common.aid.jsdk.javax.servlet.filter.HTTPContextHandlingFilter</filter-class> </filter> <!-- ↓↓↓ 以下を追加 --> <filter> <filter-name>AutoLoginFilter</filter-name> <filter-class>jp.co.intra_mart.foundation.security.filter.AutoLoginFilter</filter-class> </filter> <!-- ↑↑↑ ここまで --> : <filter-mapping> <filter-name>HTTPContextHandlingFilter</filter-name> <servlet-name>MenuServlet</servlet-name> </filter-mapping> <!-- ↓↓↓ 以下を追加 --> <filter-mapping> <filter-name>AutoLoginFilter</filter-name> <servlet-name>MenuServlet</servlet-name> </filter-mapping> <!-- ↑↑↑ ここまで -->SSO自動ログイン用のリクエスト解析モジュールを追加します。
設定ファイル
<%ServerManager のインストールパス% /conf/access-security.xml>
修正内容
<user-security> : <initial-request-analyzer> <request-analyzer-class>jp.co.intra_mart.foundation.security.certification.ShortCutInitialRequestAnalyzer</request-analyzer-class> </initial-request-analyzer> <!-- ↓↓↓ 以下を追加 --> <initial-request-analyzer> <request-analyzer-class>jp.co.intra_mart.system.hybrid_sso_provider.HybridSSORequestAnalyzer</request-analyzer-class> </initial-request-analyzer> <!-- ↑↑↑ ここまで --> : </user-security>
5.3.3.11.2.1.2. SSOエラーページの設定¶
以下のエラーページを IM-HybridSSO 用に差し替えます。
- セッションタイムアウトエラーページ
- アクティブセッション無効エラーページ
- ログインブロックエラーページ
差し替えには以下のファイルをそれぞれ修正します。
セッションタイムアウトエラーページ
設定ファイル
<%ServerManager のインストールパス% /conf/access-security.xml>
修正内容
: <security-config> <error-page-provider> <page-provider-class>jp.co.intra_mart.foundation.security.certification.StandardErrorPageProvider</page-provider-class> : <init-param> <!-- このパスを修正してください --> <param-name>session-timeout-page</param-name> <param-value>system/security/error/im_hybrid_sso/session_timeout_page.jssp</param-value> </init-param> : <init-param> <!-- スマートフォンを利用している場合は以下も修正してください --> <param-name>session-timeout-page.sp</param-name> <param-value>system/security/error/im_hybrid_sso/session_timeout_page_smartphone.jssp</param-value> </init-param> </error-page-provider> </security-config>アクティブセッション無効エラーページ
設定ファイル
<%ServerManager のインストールパス% /conf/active-session-config.xml>
修正内容
: <access-security-page-provider provider-class="jp.co.intra_mart.system.security.AccessSecurityPageProviderImpl"> <access-security-page page-id="active-session-invalidated"> <location request-header="maskat_layoutid">system/security/error/active_session_invalidated_page_maskat.jssp</location> <location client-type="mobile">system/security/error/active_session_invalidated_page_mobile.jssp</location> <!-- このパスを修正してください --> <location>system/security/error/im_hybrid_sso/active_session_invalidated_page.jssp</location> <!-- スマートフォンを利用している場合は以下も修正してください --> <location client-type="sp">system/security/error/im_hybrid_sso/active_session_invalidated_page_smartphone.jssp</location> </access-security-page> </access-security-page-provider>ログインブロックエラーページ
設定ファイル
<%ApplicationRuntime のインストールパス% /doc/imart/WEB-INF/web.xml>
修正内容
: <filter> <filter-name>LoginBlockFilter</filter-name> <filter-class>jp.co.intra_mart.foundation.security.filter.LoginBlockFilter</filter-class> <init-param> <param-name>pagePath</param-name> <!-- このパスを修正してください --> <param-value>/system/security/error/im_hybrid_sso/login_block_page.jssp</param-value> </init-param> <init-param> <param-name>mobilePagePath</param-name> <param-value>/system/security/error/login_block_page_mobile.jssp</param-value> </init-param> <init-param> <param-name>pagePath.sp</param-name> <!-- スマートフォンを利用している場合は以下も修正してください --> <param-value>/system/security/error/im_hybrid_sso/login_block_page_smartphone.jssp</param-value> </init-param> </filter>
5.3.3.11.2.1.3. SSOサービスプロバイダの設定¶
SSOサービスプロバイダのIDと接続先のSSO連携するログイングループの設定を行います。
設定ファイル
<%ServerManager のインストールパス% /conf/hybrid-sso-provider-config.xml>
設定例
<hybrid-sso-provider-config xmlns="http://www.intra-mart.jp/hybrid_sso_provider/hybrid-sso-provider-config" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.intra-mart.jp/hybrid_sso_provider/hybrid-sso-provider-config" provider-id="sample"> <mappings> <mapping login-group="default" encrypt-key="default-enc-key" /> <mapping login-group="other" encrypt-key="other-enc-key" /> </mappings> </hybrid-sso-provider-config>SSOサービスプロバイダ設定ファイルには、以下の設定を行います。
プロバイダIDの設定
<hybrid-sso-provider-config> の provider-id 属性にプロバイダIDを設定します。プロバイダIDは、同一のSSOを構成するドメイン上の iWP に対して、ユニークなIDとなるように設定してください。ログイングループの設定
<mappings> 内にSSO連携に利用するログイングループの数だけ <mapping> タグを記述します。login-group 属性には、ログイングループIDを設定します。encrypt-key 属性には、ブラウザの Cookie に設定される認証情報を暗号化するためのキーを設定します。注意
認証情報の暗号化方式は、Blowfish を利用しています。そのため暗号化のキーには、Blowfish でキーとして設定可能な文字列長の文字列を設定する必要があります。また、環境によりキーの文字列長が制限されている場合があります。Windows 用の Oracle JDK の暗号化プロバイダの実装では、キーの文字列長はデフォルトでは128ビット(半角16文字)に制限されています。(日本で利用する場合)encrypt-key 属性には、利用している環境で設定可能な文字列長の文字列を設定してください。Oracle JDK の暗号化プロバイダについては、以下を参照してください。
5.3.3.11.2.1.4. ベースURLの設定¶
Webサーバを利用するなどして、ブラウザからのリクエストURLと iWP が受け付けるリクエストURLが異なる場合は、ベースURLの設定が必要です。ベースURLを設定するために、以下の設定が必要です。設定がない場合は、追加するようにしてください。
設定ファイル
<%ServerManager のインストールパス% /conf/parameter.xml>
修正内容
: <param> <param-name>im.web_server.url</param-name> <param-value><http または https>://<アクセス可能なホスト名>:<PORT></param-value> </param>以下の構成の場合は、<param-value> に http://www.intra-mart.jp を設定します。
WebサーバリクエストURL http://www.intra-mart.jp/imart/~ iWP が受け付けるリクエストURL http://iap.intra-mart.jp:8080/imart/~ 外部メニュー連携用モジュールでは、この設定を利用してメニュー情報の URL を生成しています。この設定がない場合は、iWP が受け付けるリクエストURL を基にメニュー情報の URL が生成されるため、Webサーバ経由のアクセスができなくなります。
5.3.3.11.2.1.5. Webサービス実行ユーザ設定¶
Webサービスを実行する特定のユーザを定義します。
Webサービス実行ユーザを定義します。Webサービス実行用に新しくユーザを作成し、特定のロールを付与してください。新しくユーザが作成できない場合は、既存のユーザにロールを付与して、実行用ユーザとして利用することも可能です。 「ログイングループ管理画面」の「Webサービスアクセスメニュー」より、以下のWebサービスにWebサービス実行ユーザの権限(1.で設定したロール)を付与します。IM-HybridSSO 用と外部メニュー連携用のWebサービスがありますが、それぞれのオペレーションに同じ権限を設定してください。
Webサービス オペレーション 説明 AdmissionService publishKey IM-HybridSSO のログイン確認と認証情報の作成。 MenuService getAvailableMenuTree 表示用の外部メニューツリーの取得。グローバルナビやサイトマップに表示されるメニューツリーを取得します。MenuService getManagedMenuTree 管理用の外部メニューツリーの取得。メニュー設定画面でメニューの表示位置を設定するためのメニューツリーを取得します。各画面の操作手順については、iWP の「 グループ管理者操作ガイド 」を参照してください。
- ロールの作成について・・・「1.5.2 ロールの設定」
- ユーザの作成とロールの付与について・・・「1.5.3 ユーザの登録と削除(アカウント情報とプロファイル情報)」
- Webサービス実行ユーザの権限について・・・「1.14 Webサービスアクセス設定」
また、iWP の Webサービスについては詳しく知りたい場合は、 iWP の「 Web サービス プログラミングガイド 」を参照してください。
5.3.3.11.2.1.6. SSOサービスプロバイダ情報の提供¶
SSO 連携する iAP のシステム管理者に以下の情報を提供します。iAP のシステム管理者は、この情報を参照して、iAP の設定を行います。iAP の設定については、「 iAP の設定 」を参照してください。
プロバイダID iWP の設定ファイル「hybrid-sso-provider-config.xml」に設定したプロバイダID 認証情報用エンドポイント 以下のフォーマットです。http://<HOST>:<PORT>/<CONTEXT_PATH>/services/AdmissionService 外部メニュー連携用エンドポイント 以下がフォーマットです。http://<HOST>:<PORT>/<CONTEXT_PATH>/services/MenuService Webサービス接続先ログイングループID SSOサービスプロバイダのログイングループIDです。 Webサービス接続用ユーザコード 権限を与えられたユーザのユーザコードです。 Webサービス接続用ユーザパスワード 権限を与えられたユーザのパスワードです。 ログアウトURL 以下のフォーマットです。http://<HOST>:<PORT>/<CONTEXT_PATH>/user.logout
5.3.3.11.2.2. iAP の設定¶
5.3.3.11.2.2.1. IM-HybridSSO モジュールの選択¶
IM-Juggling で、「追加機能」-「認証拡張機能」-「iAP-iWP間SSO連携モジュール(IM-HybridSSO)」を選択します。「iAP-iWP間SSO連携モジュール(IM-HybridSSO)」を利用するには、「外部メニュー連携」モジュールが必要です。「外部メニュー連携」は、「iAP-iWP間SSO連携モジュール(IM-HybridSSO)」に対して「依存関係も含めて選択」を行うことで自動的に選択されます。
5.3.3.11.2.2.2. SSOサービスプロバイダの設定¶
利用するSSOサービスプロバイダを設定ファイルに記述します。「設定ファイル」タブから、「iAP-iWP間SSO連携モジュール(IM-HybridSSO)」-「SSO連携用マッピング設定(hybrid-sso-mapping-config)」を出力します。「SSO連携用マッピング設定(hybrid-sso-mapping-config)」に、SSOサービスプロバイダの設定を記述します。連携するSSOサービスプロバイダの数だけ <mapping> タグにSSOサービスプロバイダの情報を記述してください。プロバイダIDには、「 SSOサービスプロバイダの設定 」で iWP に設定した値を記述してください。IM-HybridSSO を構成するサーバは、全て同一のドメイン上に構築する必要があります。以下の構成の場合、設定ファイルのサイトドメインに設定する値は「intra-mart.jp」です。
- SSO認証プロバイダ: iap.intra-mart.jp
- SSOサービスプロバイダ1: iwp1.intra-mart.jp
- SSOサービスプロバイダ2: iwp2.intra-mart.jp
設定ファイルの詳細な設定内容については「 設定ファイルリファレンス 」-「 SSO連携用マッピング設定 」を参照してください。
5.3.3.11.2.3. 同一ホストで運用する場合の設定¶
iAP と iWP を同一ホストで運用する場合、一部の Cookie 名が重複するため、SSO を利用するためには、Cookie 名を変更する必要があります。以下の設定を変更してください。
セッション Cookie 名の変更
セッションの Cookie 名は、アプリケーションサーバにより変更が可能です。Resin の場合の設定方法は、以下の通りです。
設定ファイル
<%RESIN_HOME%/conf/resin.xml>
修正内容
<!-- - Resin 4.0 configuration file. --> <resin xmlns="http://caucho.com/ns/resin" xmlns:resin="urn:java:com.caucho.resin"> : <cluster id="app"> : <session-cookie>IAP_SESSIONID</session-cookie> : </cluster> </resin>Resin 以外の設定方法は、アプリケーションサーバのドキュメントを参照してください。セッション情報チェック用 Cookie 名の変更
セッション情報の有効性を確認するための Cookie 名を変更します。Cookie 名は、デフォルトでは「jp.co.intra_mart.session.cookie」が設定されていますので、この値を任意の値に変更してください。
設定例
: <!-- セッション情報管理で使用する設定 --> <category name="im_session"> <!-- セッション管理情報を保存するクッキー名 --> <param> <param-name>cookie_name</param-name> <param-value>jp.co.intra_mart.session.cookie.iap</param-value> </param> </category>