Interstage Application Server シングル・サインオン運用ガイド |
目次
索引
![]() ![]() |
第7章 認証サーバ間連携 | > 7.4 カスタマイズ | > 7.4.1 ユーザ情報のカスタマイズ |
Interstage シングル・サインオンでは、ユーザ情報を変換するカスタマイズモジュールを作成するためのJavaインタフェースクラスを提供します。(注)
各クラスのAPI仕様については、マニュアルCDの“ApplicationServer\javadocs”フォルダに格納されているJavaDoc(javadocs_sso_federation)を参照してください。
インタフェース名 |
用途 |
説明 |
SSOUserInfoSender |
送信用 |
本インタフェースを実装したクラスを作成し、変換を行うメソッドを実装することで、送信時のユーザ情報の変換を実現します。 |
SSOUserInfoReceiver |
受信用 |
本インタフェースを実装したクラスを作成し、変換を行うメソッドを実装することで、受信時のユーザ情報の変換を実現します。 |
注)提供するクラスが前提とするJavaのバージョンは5.0以降です。
Interstage シングル・サインオンでは、以下のユーザ情報を変換、および参照することができます。
各ユーザ情報の詳細については、“環境変数によるユーザ情報の通知の設定”を参照してください。
ユーザ情報 |
変換 |
参照 |
利用者のDN |
可能 |
可能 |
ロール名(注1)(注2) |
可能 |
可能 |
利用者のユーザID |
可能 |
可能 |
認証方式 |
不可 |
可能 |
クライアントのIPアドレス |
不可 |
可能 |
認証時刻 |
不可 |
可能 |
再認証時刻 |
不可 |
可能 |
前回サインオン日時 |
不可 |
可能 |
拡張ユーザ情報 |
可能 |
可能 |
注1)ロール名を変換することで、利用者のアクセスを制御することができます。例えば、以下のようにロール名を削除することで、ロールが設定されている保護リソースへのアクセスを拒否することができます。
![]()
public void modifyReceivedData ( SSOUserInformation userInfo, SSOSystemInformation systemInfo ) throws SSOCustomFailedException { // ロールの値を削除 userInfo.removeRole(); }
注2)ユーザ情報にロールセットが設定されている場合は、ロールセットに設定されているロール名が通知されます。
カスタマイズモジュールを使用してユーザ情報を変換するカスタマイズ手順について、以下のような運用を例に説明します。
このとき、ユーザ情報を送信する相手シングル・サインオンシステムに応じたユーザ情報の変換が行われるように、SSOUserInfoSenderインタフェースで宣言されている以下のメソッドを実装します。(注2)
このとき、ユーザ情報を送信する相手シングル・サインオンシステムに応じたユーザ情報の変換が行われるように、SSOUserInfoReceiverインタフェースで宣言されている以下のメソッドを実装します。(注2)
相手シングル・サインオンシステム名に“systemB”、および“systemC”を指定している例です。
<?xml version="1.0" encoding="Shift_JIS" ?> <!-- XML宣言およびDTD修正禁止↓ --> 〜省略〜 <!-- XML宣言およびDTD修正禁止↑ --> <SSOUserInfo> <Pluginlist> <plugin name="CustomSendToSystemB" type="sender">user.custom.SSOUserInfoSenderSystemB</plugin> <plugin name="CustomSendToSystemC" type="sender">user.custom.SSOUserInfoSenderSystemC</plugin> <plugin name="CustomReceivedFromAll" type="receiver">user.custom.SSOUserInfoReceiverSystemAll</plugin> </Pluginlist> <Rulelist> <rule name="SendToSystemB" postmodify ="CustomSendToSystemB"> <USER_DN transparent="true"/> <ROLE_LIST transparent="true"/> <USER_ID transparent="true"/> </rule> <rule name="SendToSystemC" postmodify ="CustomSendToSystemC"> 〜省略〜 </rule> <rule name="ReceivedFromAll" postmodify ="CustomReceivedFromAll"> 〜省略〜 </rule> </Rulelist> <Systemlist> <system name="systemB"> <send rule="SendToSystemB"/> <receive rule="ReceivedFromAll"/> </system> <system name="systemC"> <send rule="SendToSystemC"/> <receive rule="ReceivedFromAll"/> </system> </Systemlist> </SSOUserInfo>
注1)任意のパッケージ、およびクラス名が使用できます。また、パッケージの使用は任意です。
注2)変換を行うメソッド内で例外が発生した場合、Interstage シングル・サインオンのシステムのログが出力され、Webブラウザには「内部エラーが発生しました」というメッセージが表示されます。独自で変換処理を中断する場合は、SSOCustomFailedExceptionをスローするように実装してください。
注3)コンパイルに使用するJDKのバージョンは、認証サーバ間連携サービスを配備したワークユニットが使用するJavaのバージョンに合わせてください。
注4)コンパイル時には、以下のパスをクラスパスに追加する必要があります。
C:\Interstage\F3FMsso\ssofsv\lib\isssofsv.jar
/opt/FJSVssofs/lib/isssofsv.jar
注5)ファイル名は任意です。また、複数のjarファイルにクラスを分割することも可能です。ただし、複数のjarファイルに分割した場合、手順5.で作成した全てのjarファイルを格納する必要があります。
注6)ユーザ情報カスタマイズ定義ファイルに登録済みのクラスを修正した場合は、認証サーバ間連携サービスを再起動してください。認証サーバ間連携サービスの起動および停止については、“認証サーバ間連携サービスの起動・停止・削除”を参照してください。
user.custom.SSOUserInfoSenderSystemBの実装例を以下に示します。ただし、実装内容は、送信用、受信用を意識していません。
package user.custom; import com.fujitsu.interstage.sso.fsv.common.SSOCustomFailedException; import com.fujitsu.interstage.sso.fsv.data.SSOSystemInformation; import com.fujitsu.interstage.sso.fsv.data.SSOUserInformation; import com.fujitsu.interstage.sso.fsv.data.SSOUserInfoSender; import java.util.HashSet; import java.util.Set; public class SSOUserInfoSenderSystemB implements SSOUserInfoSender { public void initSender(){ // 必要に応じて、初期化処理を実装 } public void modifySendingData ( SSOUserInformation userInfo, SSOSystemInformation systemInfo ) throws SSOCustomFailedException { // 送信するユーザ情報の変換を実装 // 変換後のユーザ情報の値を準備 Set<String> convRole = new HashSet<String>(); convRole.add( new String( "guest") ); Set<String> convMail = new HashSet<String>(); convMail.add( new String( "admin@system-a.fujitsu.com") ); // ユーザIDを"ユーザID_systemA"に変更 StringBuffer convUserID = new StringBuffer( userInfo.getUserID() ); convUserID.append( "_systemA" ); userInfo.setUserID( convUserID.toString() ); // ロールを"guest"に変更 userInfo.setRole( convRole ); // 拡張ユーザ情報:mailを"admin@system-a.fujitsu.com"に変更 userInfo.setExtUserInfo( "mail", convMail ); } public void destroySender(){ // 必要に応じて、終了処理を実装 } } |
目次
索引
![]() ![]() |