開発Blog

intra-martでのシングルサインオン(SSO)について

投稿日:2010-02-10 更新日:

こんにちは、開発本部の大西です。

最近、非常にご質問の多い、シングルサインオン(SSO)の対応方法について、お話したいと思います。

個人的には、XSSやSQLインジェクションなどの脆弱性などのセキュリティに関して、いろいろと非常にうるさい世の中の癖に、一番重要なはずのログイン認証、特に、SSOに関しては、非常に緩く、SSOぐらい当たり前というのが納得がいかない、きょう、この頃です・・・。 

そんなことは置いておいて、intra-martには、SSO認証対応として、認証およびユーザ情報を外部で管理した場合に、ログイン認証処理を省略することが可能になる仕組みがあります。(Ver5.0以降)
つまり、intra-martでは、他システムで認証された情報を元に自動的にログインさせるということが可能になっています。

SSOにて、外部で認証した場合のイメージが、以下の図になります。
sso.png
ただし、以下の条件が必須になります。

    ・intra-martに対するリクエスト情報(「リクエスト・パラメータ」、「リクエスト・ヘッダ」「httpクッキー」など)として、「ユーザID」が必要。
    ・外部のシステムとintra-mart間でユーザIDが同じ
    ・以下の方法の場合、URIとログイングループが等しい。

このような場合、intra-martでの認証シーケンスのうち、下記の図にある赤丸のリクエストパラメータ解析を行っている部分を標準のものから、別のリクエスト情報を読取り、「ユーザID」を取得し、強制的にログインをさせるものに置き換えることで対応が可能です。


対応方法

(以下、intra-martがインストールされているディレクトリを<imart>とします。) 

1. access-security.xmlの変更

intra-martのServerManagerがインストールされているサーバの
<imart>/conf/access-security.xml を
[code:xml]

jp.co.intra_mart.foundation.security.certification.StandardRequestAnalyzer

jp.co.intra_mart.foundation.security.certification.StandardRequestAnalyzer

[/code]

から
[code:xml]

jp.co.intra_mart.foundation.security.certification.SSORequestAnalyzer

jp.co.intra_mart.foundation.security.certification.SSORequestAnalyzer

[/code]

に変更してください。

2. SSORequestAnalyzerの作成

以下のサンプルを参考に、<imart>doc/imart/WEB-INF/classes/jp/co/intra_mart/foundation/security/certification/SSORequestAnalyzer を作成してください。
[code:java]
public LoginRequestInfo parseRequest(LoginRequestInfo loginInfo, HttpServletRequest request) {
// 情報初期化
//loginInfo.setUser(StringUtil.EMPTY_STRING);
loginInfo.setPassword(StringUtil.EMPTY_STRING);
Cookie[] cookies = request.getCookies();
String cookie = null;
for (int i = 0; cookies != null && i 0) {
loginInfo.setUser(comids[0]);
}
if (comids.length > 1) {
loginInfo.setLoginGroup(comids[1]);
}
// ここに来れば認証は終了しています。
loginInfo.setDoneCertification(true);
// SSOログアウトURLが存在するなら、初期URLに設定します。
if(this.ssoLogoutUrl.length() > 0) {
loginInfo.setInitialUrl(this.ssoLogoutUrl);
}
break;
}
}
return loginInfo;
}
[/code]
上記サンプルは、IM-SSOを利用時のサンプルコードで、この場合、クッキー情報から「ユーザーID」を取得して、UserInfo情報へ「ユーザID」を設定します。(5行目~32行目まで)

認証元のシステムから「ユーザID」が「httpクッキー」で送られてくる場合は、上記処理を参考に修正してください。
「リクエスト・パラメータ」の場合は、request.getParamter()で「ユーザID」を取得して、UserInfo情報へ「ユーザID」を設定してください。
「リクエスト・ヘッダ」の場合は、request.getHeader()で「ユーザID」を取得して、UserInfo情報へ「ユーザID」を設定してください。

※上記サンプルは、製品情報ダンロードページの「アクセスセキュリティ機能のソース」に含まれています。

このように、SSO認証用の専用のモジュールに置き換えることにより、SSO対応ができるようになります。ログイン認証の処理は、いろいろと工夫することにより、SSOだけでなく、各システムのいろいろな要件に対応することができますので、いろいろと試してみてください。

-開発Blog
-

執筆者:


comment

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です

関連記事

no image

intra-mart Advent Calendar 2013 第2日:テナント環境セットアップって自作で追加できるんですよ!

この記事は、intra-mart Advent Calendar 2013 第2日の記事です。 Advent Calendar ではあまり知られていないと思っている機能を紹介して行きたいと考えておりま …

no image

intra-mart 以外のプログラムを実行する

※下記内容は、過去のintra-mart(Ver4.3以前)に関する内容です。最新のintra-martでは、異なる情報であることがありますので、ご注意ください。 通常、intra-mart を We …

no image

アクセスセキュリティモジュール(ログイン画面)を利用しないでアプリケーションを構築する方法

※下記内容は、過去のintra-mart(Ver4.3以前)に関する内容です。最新のintra-martでは、異なる情報であることがありますので、ご注意ください。 ※以下はAPIリストからの抜粋です。 …

no image

トイレの空き状況の見える化システム

初めまして、開発本部の矢野と申します。 この記事では今までとはちょっと違い、intra-mart 社の普段の雰囲気を感じていただくために、製品の説明や紹介ではなく、私がつい最近取り組んだ日常的な仕事に …

no image

Resin利用時の安定運用について

intra-mart Accel Platformにて、Resin4.0を利用されている場合は、以下のスライドを参考に、弊社推奨の対応の実施をお願いします。 実施してない場合 システムの予期せぬ運用停 …

まだデータがありません。

RSSRSSRSSRSS