Interstage Application Server シングル・サインオン運用ガイド
目次 索引 前ページ次ページ

第7章 認証サーバ間連携> 7.4 カスタマイズ> 7.4.1 ユーザ情報のカスタマイズ

7.4.1.2 カスタマイズモジュールによるカスタマイズ

 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)ユーザ情報にロールセットが設定されている場合は、ロールセットに設定されているロール名が通知されます。

カスタマイズ手順

 カスタマイズモジュールを使用してユーザ情報を変換するカスタマイズ手順について、以下のような運用を例に説明します。

  1. ユーザ情報を送信する相手シングル・サインオンシステム向けに、SSOUserInfoSenderインタフェースを実装したクラスを作成します。
    例として、各シングル・サインオンシステム向けに以下のようなクラスを作成します。
     

    このとき、ユーザ情報を送信する相手シングル・サインオンシステムに応じたユーザ情報の変換が行われるように、SSOUserInfoSenderインタフェースで宣言されている以下のメソッドを実装します。(注2)

  2. ユーザ情報を送信した相手シングル・サインオンシステム向けに、SSOUserInfoReceiverインタフェースを実装したクラスを作成します。
    例として、共通な変換を行う処理を実装する以下のクラスを作成します。
     

    このとき、ユーザ情報を送信する相手シングル・サインオンシステムに応じたユーザ情報の変換が行われるように、SSOUserInfoReceiverインタフェースで宣言されている以下のメソッドを実装します。(注2)

  3. 作成したサブクラスをコンパイルします。(注3)(注4)
     
  4. コンパイルしたサブクラスを含むjarファイルを作成します。ここでは、作成するファイルをcustomuserinfo.jarとします。(注5)
     
  5. customuserinfo.jarを以下のディレクトリに格納します。

    C:\Interstage\F3FMsso\ssofsv\webapps\ssofsv\WEB-INF\lib

    /etc/opt/FJSVssofs/webapps/ssofsv/WEB-INF/lib
     
  6. 作成したクラス名をユーザ情報カスタマイズ定義ファイルに登録します。(注6)

 相手シングル・サインオンシステム名に“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(){
        // 必要に応じて、終了処理を実装
        
    }

}

目次 索引 前ページ次ページ

Copyright 2008 FUJITSU LIMITED