6.1. SSO(シングルサインオン)対応¶
SSOユーザコードプロバイダを実装することで、intra-mart Accel Platform アクセス時にリクエスト情報(リクエストヘッダー、クッキー、リクエストパラメータなど)からユーザ情報を取得して自動ログインを行うことができます。
これにより、シングルサインオン(以下、SSO と記述します)を実現することができます。
intra-mart Accel Platform における SSO の仕様については、「認証仕様書」 - 「SSO(シングルサインオン)」を参照してください。
6.1.1. SSOユーザコードプロバイダ・プラグイン¶
一般ユーザのSSOを実現するには、次のプロバイダを実装します。
プラグイン一覧 プロバイダ名 概要 拡張ポイント SSOユーザコードプロバイダ リクエスト情報を元に、SSOさせたいユーザコードを返却します。 jp.co.intra_mart.foundation.security.certification.sso.user.providers
6.1.2. SSOユーザコードプロバイダ・プラグイン詳細¶
6.1.2.1. インタフェース定義¶
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 package jp.co.intra_mart.foundation.security.certification.sso; import javax.servlet.http.HttpServletRequest; /** * シングルサインオンの自動ログイン用ユーザ情報の取得を行うインタフェースです。 */ public interface SSOUserProvider { /** * 自動ログインを行うユーザコードを返却します。<br> * ユーザコードを取得できなかった場合はnullを返却します。 * @param request サーブレットリクエスト * @return ユーザコード */ String getUserCd(final HttpServletRequest request); }
6.1.2.2. 標準実装¶
初期状態で提供されるプロバイダはありません。
6.1.2.3. 実装サンプル¶
リクエストパラメータ「sample_user_code」からユーザコードを取得し、SSOするサンプルです。ユーザをリクエストパラメータ「sample_user_code」として送信することにより、自動ログインを実現します。なお、本コードはサンプルであるため、セキュリティを考慮していません。
サンプル Java コード
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 package sample; import javax.servlet.http.HttpServletRequest; import jp.co.intra_mart.foundation.security.certification.sso.SSOUserProvider; public class SampleSSOUserProvider implements SSOUserProvider { @Override public String getUserCd(final HttpServletRequest request) { // リクエストパラメータからSSOユーザコードを取得します final String userCd = request.getParameter("sample_user_code"); if (userCd != null) { return userCd; } // nullを返却することで別のプロバイダに処理を委譲できます return null; } }サンプルプラグイン設定ファイル
1 2 3 4 5 6 7 8 9 10 11 12 <?xml version="1.0" encoding="UTF-8"?> <plugin> <extension point="jp.co.intra_mart.foundation.security.certification.sso.user.providers"> <sso-user-providers id="sample.programming_guide.sso_user_provider" name="Sample SSO User Provider" version="1.0" rank="50"> <sso-user-provider class="sample.SampleSSOUserProvider"/> </sso-user-providers> </extension> </plugin>引数のリクエスト情報から、ユーザコードを返却するようにします。null を返却することで、別のプラグインに処理を委譲することができます。全てのSSOユーザコードプロバイダプラグインが null を返却した場合、未認証としてアクセスされます。SSOユーザコードプロバイダプラグインが 存在しないユーザコードを返却した場合、 intra-mart Accel Platform 2013 Winter(Felicia) までは未認証としてアクセスされ、intra-mart Accel Platform 2014 Spring(Granada) 以降のバージョンでは HTTP500 エラーが出力されます。プラグインとして設定された順番にプロバイダが実行されます。順番を考慮した実装および設定を行ってください。動作確認を行うために以下のURLにアクセスしてください。ユーザ「aoyagi」でログインしていればサンプルは正しく動作しています。
- http://<HOST>:<PORT>/<CONTEXT_PATH>/home?sample_user_code=aoyagi
注意
SSOユーザコードプロバイダの実装において、ユーザコードの取得方法が容易に推測可能であるような方式は、セキュリティ上好ましくありません。 ユーザコードの暗号化またはデータの改ざん防止等を考慮した実装を行うことをお奨めします。