ページの先頭行へ戻る
Interstage Application Server シングル・サインオン運用ガイド
Interstage

7.4.1 ユーザ情報のカスタマイズ

  Interstage シングル・サインオンでは、認証サーバ間連携を行う場合、シングル・サインオンシステム間でユーザ情報を通知する際に必要な変換処理を行うために、以下のカスタマイズ方法を提供しています。

  すべてのユーザ情報を変換せずに通知することも可能ですが、セキュリティを考慮し、必要なユーザ情報を通知するようカスタマイズしてください。
  すべてのユーザ情報を変換せずに通知する場合は、“7.2.2.3 認証サーバ間連携の設定”時にInterstage管理コンソールにて設定を行ってください。

  また、カスタマイズモジュールを使用することで、変換ルールを拡張し、ユーザ情報を詳細にカスタマイズすることができます。カスタマイズモジュールを使用してユーザ情報をカスタマイズする場合は、7.4.1.2 カスタマイズモジュールによるカスタマイズを参照してください。

7.4.1.1 ユーザ情報カスタマイズ定義ファイルに記述した変換ルールによるカスタマイズ

  変換ルールを記述したユーザ情報カスタマイズ定義ファイルを使用することで、ユーザ情報をカスタマイズすることができます。

変換ルールを使用してユーザ情報がカスタマイズされる流れ

  以下に変換ルールを使用してユーザ情報がカスタマイズされる流れを示します。

  情報A,Bをカスタマイズし、利用者のユーザIDを出力する場合を例に説明します。

  1. 情報Aは情報Bよりも先に定義されているので、情報Aの属性値“user0001”が最初に処理されます。(図中(1))

  2. 属性値は昇順に並べ替えた順番で処理されるので、情報Bの属性値は“a00001”、“z12345”の順に処理されます。(図中(2)、(3))

  3. 最後に変換出力された“ID_30001”が“利用者のユーザID”の属性値となります。

  Interstage シングル・サインオンが提供する雛形のユーザ情報カスタマイズ定義ファイルは、以下に格納されています。使用する環境に合わせてコピーして利用してください。

雛形のユーザ情報カスタマイズ定義ファイルと格納先
  雛形ユーザ情報カスタマイズ定義ファイル名

・custom_EN.xml
    ASCIIコードで記述されています。
・custom_SJIS.xml
    シフトJISコードで記述されています。
・custom_EUC.xml
    EUCコードで記述されています。
・custom_UTF8.xml
    UTF-8コードで記述されています。

  雛形ユーザ情報カスタマイズ定義ファイルの格納先


  C:\Interstage\F3FMsso\ssofsv\webapps\ssofsv\original\conf

  /etc/opt/FJSVssofs/webapps/ssofsv/original/conf

  作成したユーザ情報カスタマイズ定義ファイルは、“custom.xml”に変名し、以下に格納してください。

ユーザ情報カスタマイズ定義ファイル名と格納先
  ユーザ情報カスタマイズ定義ファイル名

custom.xml

  ユーザ情報カスタマイズ定義ファイルの格納先


  C:\Interstage\F3FMsso\ssofsv\webapps\ssofsv\custom\conf\

  /etc/opt/FJSVssofs/webapps/ssofsv/custom/conf/

ユーザ情報カスタマイズ定義ファイルの作成方法

  ユーザ情報カスタマイズ定義ファイルには、ユーザ情報を変換するルールをXML形式で記述します。ユーザ情報カスタマイズ定義ファイルの編集は、認証サーバを構築したマシンで、認証サーバ間連携サービスが停止した状態で行ってください。
  次のタグは、XML宣言およびDTD(文書型定義)を記述しているため、ユーザ情報カスタマイズ定義ファイルの先頭に必ず記述してください。

<!-- XML宣言およびDTD修正禁止↓ -->
<!DOCTYPE SSOUserInfo [
<!ELEMENT SSOUserInfo           (Pluginlist, Rulelist, Systemlist)>
<!ELEMENT Pluginlist            (plugin*)>
<!ELEMENT plugin                (#PCDATA)>
<!ATTLIST plugin name           ID    #REQUIRED
                 type           (sender | receiver) #REQUIRED>
<!ELEMENT Rulelist              (rule*)>
<!ELEMENT rule                  (USER_DN, ROLE_LIST*, USER_ID, ExtraInfo*)>
<!ATTLIST rule name             ID    #REQUIRED
               postmodify       IDREF #IMPLIED>
<!ELEMENT USER_DN               (input*, create*)>
<!ATTLIST USER_DN transparent   (true | false) "false">
<!ELEMENT ROLE_LIST             (input*, create*)>
<!ATTLIST ROLE_LIST transparent (true | false) "false">
<!ELEMENT USER_ID               (input*, create*)>
<!ATTLIST USER_ID transparent   (true | false) "false">
<!ELEMENT ExtraInfo             (input*, create*)>
<!ATTLIST ExtraInfo name        CDATA #REQUIRED
                    transparent (true | false) "false">
<!ELEMENT input                 (select*, default?)>
<!ATTLIST input name            CDATA    #REQUIRED>
<!ELEMENT create                (#PCDATA)>
<!ATTLIST create param1         (localname | partnername) "localname"
                 param2         (localname | partnername) "partnername">
<!ELEMENT select                (#PCDATA)>
<!ATTLIST select match          CDATA #IMPLIED
                 param1         (inputvalue | localname | partnername) "inputvalue"
                 param2         (inputvalue | localname | partnername) "localname"
                 param3         (inputvalue | localname | partnername) "partnername">
<!ELEMENT default               (#PCDATA)>
<!ATTLIST default param1        (inputvalue | localname | partnername) "inputvalue"
                  param2        (inputvalue | localname | partnername) "localname"
                  param3        (inputvalue | localname | partnername) "partnername">
<!ELEMENT Systemlist            (system*)>
<!ELEMENT system                (send, receive)>
<!ATTLIST system name           CDATA #REQUIRED>
<!ELEMENT send                  EMPTY>
<!ATTLIST send rule             IDREF #REQUIRED
               debug            (true | false) "false">
<!ELEMENT receive               EMPTY>
<!ATTLIST receive rule          IDREF #REQUIRED
                  debug         (true | false) "false">
                                ]>
<!-- XML宣言およびDTD修正禁止↑ -->

  ユーザ情報カスタマイズ定義ファイルで設定するXMLタグを、以下のXMLタグ表に示します。
  XMLタグ表の項目、属性、および値の文字列は、大文字と小文字が区別されます。項目の出現順序は下表に記述してある順番に従ってください。

  変換ルールを使用してユーザ情報がカスタマイズされる流れを参考に、内部項目2に指定する“変換前のユーザ情報”を、内部項目1に指定する“変換ルール”でカスタマイズし、小項目に指定した“変換後のユーザ情報”を生成するように記述してください。

  なお、“変換前のユーザ情報”を使用しない場合は、内部項目2の指定は不要です。
  また、内部項目1は複数指定することが可能であり、指定された順に変換処理が行なわれます。ある内部項目1に指定した変換ルールで属性値が生成されても、同じ小項目内に変換処理が行われていない別の内部項目1があれば、その変換処理が継続して行われます。

ルート項目

大項目

中項目

小項目

内部項目1

内部項目2

項目の省略可否

属性

属性の省略可否

説明

SSOUserInfo

Pluginlist

plugin

  

  

  

name

不可

ユーザ情報の変換を行うカスタマイズモジュールのクラス名を完全修飾名で指定します。
このタグを一意に特定するための文字列をname属性に指定してください。

type

不可

カスタマイズモジュールの用途をtype属性に指定します。

  • 送信データ変換クラスの場合
    sender

  • 受信データ変換クラスの場合
    receiver

Rulelist

rule

  

  

  

name

不可

ユーザ情報の変換ルールを、小項目を指定することにより定義します。
このタグを一意に特定するための文字列をname属性に指定してください。
小項目の指定により生成されたユーザ情報を、カスタマイズモジュールによって変換したい場合は、使用するカスタマイズモジュールが指定されたPluginタグのID属性値をpostmodify属性に指定してください。

postmodify

USER_DN

  

  

不可

transparent

利用者のDNを生成する場合に、内部項目1を指定することで定義します。
ただし、変換前の利用者のDNをそのまま出力する場合には、transparent属性に“true”を指定してください。

input

  

name

不可

変換前のユーザ情報を使用してユーザ情報を生成する場合に、内部項目2を指定することで定義します。
name属性に変換前のユーザ情報を指定してください。(注1)

select

match

変換前のユーザ情報にmatch属性で指定した値が存在する場合に、生成する属性値の書式を指定してください。(注2)(注3)
書式には、3個の可変パラメタを含めることができます。

変換前のユーザ情報が複数の値を持つ場合は、全ての値に対してmatch属性値との比較が行なわれます。
あるselectタグで属性値が生成されると、以降に定義されているselectタグは参照されません。

param1

param2

param3

default

param1

変換前のユーザ情報の値が、全てのselectタグのmatch属性で指定した値ではない場合に、生成する属性値の書式を指定してください。(注2)(注4)
書式には、3個の可変パラメタを含めることができます。(注5)

param2

param3

create

  

param1

変換前のユーザ情報を使用しないで、ユーザ情報を生成する場合に、生成する属性値の書式を指定してください。(注2)
書式には、2個の可変パラメタを含めることができます。(注6)

param2

ROLE_LIST

  

  

transparent

ロール名を生成する場合に、内部項目1を指定することで定義します。
ただし、変換前のロール名をそのまま出力する場合には、transparent属性に“true”を指定してください。

input

  

name

不可

変換前のユーザ情報を使用してユーザ情報を生成する場合、内部項目2を指定することで定義します。
name属性に変換前のユーザ情報を指定してください。(注1)

select

match

変換前のユーザ情報にmatch属性で指定した値が存在する場合に、生成する属性値の書式を指定してください。(注2)(注3)
書式には、3個の可変パラメタを含めることができます。

変換前のユーザ情報が複数の値を持つ場合は、全ての値に対してmatch属性値との比較が行なわれます。
あるselectタグで属性値が生成されると、以降に定義されているselectタグは参照されません。

param1

param2

param3

default

param1

変換前のユーザ情報の値が、全てのselectタグのmatch属性で指定した値ではない場合に、生成する属性値の書式を指定してください。(注2)(注4)
書式には、3個の可変パラメタを含めることができます。(注5)

param2

param3

create

  

param1

変換前のユーザ情報を使用しないで、ユーザ情報を生成する場合に、生成する属性値の書式を指定してください。(注2)
書式には、2個の可変パラメタを含めることができます。(注6)

param2

USER_ID

  

  

不可

transparent

利用者のユーザIDを生成する場合に、内部項目1を指定することで定義します。
ただし、変換前の利用者のユーザIDをそのまま出力する場合には、transparent属性に“true”を指定してください。

input

  

name

不可

変換前のユーザ情報を使用してユーザ情報を生成する場合に、内部項目2を指定することで定義します。
name属性に変換前のユーザ情報を指定してください。(注1)

select

match

変換前のユーザ情報にmatch属性で指定した値が存在する場合に、生成する属性値の書式を指定してください。(注2)(注3)
書式には、3個の可変パラメタを含めることができます。

変換前のユーザ情報が複数の値を持つ場合は、全ての値に対してmatch属性値との比較が行なわれます。
あるselectタグで属性値が生成されると、以降に定義されているselectタグは参照されません。

param1

param2

param3

default

param1

変換前のユーザ情報の値が、全てのselectタグのmatch属性で指定した値ではない場合に、生成する属性値の書式を指定してください。(注2)(注4)
書式には、3個の可変パラメタを含めることができます。(注5)

param2

param3

create

  

param1

変換前のユーザ情報を使用しないで、ユーザ情報を生成する場合に、生成する属性値の書式を指定してください。(注2)
書式には、2個の可変パラメタを含めることができます。(注6)

param2

ExtraInfo

  

  

name

不可

拡張ユーザ情報を生成する場合に、内部項目1を指定することで定義します。
ただし、変換前の拡張ユーザ情報をそのまま出力する場合には、transparent属性に“true”を指定してください。
name属性に拡張ユーザ情報名を指定してください。(注7)

transparent

input

  

name

不可

変換前のユーザ情報を使用してユーザ情報を生成する場合に、内部項目2を指定することで定義します。
name属性に変換前のユーザ情報を指定してください。(注1)

select

match

変換前のユーザ情報にmatch属性で指定した値が存在する場合に、生成する属性値の書式を指定してください。(注2)(注3)
書式には、3個の可変パラメタを含めることができます。

変換前のユーザ情報が複数の値を持つ場合は、全ての値に対してmatch属性値との比較が行なわれます。
あるselectタグで属性値が生成されると、以降に定義されているselectタグは参照されません。

param1

param2

param3

default

param1

変換前のユーザ情報の値が、全てのselectタグのmatch属性で指定した値ではない場合に、生成する属性値の書式を指定してください。(注2)(注4)
書式には、3個の可変パラメタを含めることができます。(注5)

param2

param3

create

  

param1

変換前のユーザ情報を使用しないで、ユーザ情報を生成する場合に、生成する属性値の書式を指定してください。(注2)
書式には、2個の可変パラメタを含めることができます。(注6)

param2

Systemlist

system

  

  

  

name

不可

相手シングル・サインオンシステムごとに、どのユーザ情報の変換ルールを適用するかを、小項目を指定することで定義します。
name属性には、認証サーバの環境設定で設定する、相手シングル・サインオンシステムのシングル・サインオンシステム名を指定してください。(注8)

send

  

  

不可

rule

不可

相手シングル・サインオンシステムへユーザ情報を送信する場合に適用するユーザ情報の変換ルールをrule属性に指定してください。
debug属性に“true”を指定することにより、認証サーバ間連携サービスのコンテナログに、変換前後のユーザ情報を出力することができます。(注9)

debug

receive

  

  

不可

rule

不可

相手シングル・サインオンシステムからユーザ情報を受信した場合に適用するユーザ情報の変換ルールをrule属性に指定してください。
debug属性に“true”を指定することで、認証サーバ間連携サービスのコンテナログに、変換前後のユーザ情報を出力することができます。(注9)

debug

注1)以下のユーザ情報が指定できます。変換前のユーザ情報に指定したユーザ情報が存在しない場合は、本タグは無効となります。ユーザ情報の詳細については、“6.2 環境変数によるユーザ情報の通知の設定”を参照してください。

  (*1)ユーザ情報にロールセットが設定されている場合は、ロールセットに設定されているロール名が通知されます。
  (*2)セションの管理を行っていないシステムでは、業務サーバに通知されませんが、認証サーバ間連携サービスには通知されます。

注2)java.util.Formatterで指定可能な書式で指定してください。詳細については、J2SE 5.0のJavaDocを参照してください。なお、相手シングル・サインオンシステムへ送信するユーザ情報を変換する場合には、属性値に指定可能な文字に制約はありませんが、相手シングル・サインオンシステムから受信したユーザ情報を変換する場合には、以下に示す制約があります。

ユーザ情報

制約

USER_DN

以下を指定することはできません。

  • 空文字

  • 制御文字(ShiftJISの0x00~0x1f、0x7f)を含む文字列

ROLE_LIST

以下を指定することはできません。

  • 空文字

  • 制御文字(ShiftJISの0x00~0x1f、0x7f)を含む文字列

  • 512バイトを超える文字列

  • カンマ(,)を含む文字列

USER_ID

以下を指定することはできません。

  • 空文字

  • ASCII文字以外の文字列

  • 256バイトを超える文字列(*1)

  • 連続した空白を含む文字列

ExtraInfo

以下を指定することはできません。

  • 空文字

  • 制御文字(ShiftJISの0x00~0x1f、0x7f)を含む文字列

  (*1)自シングル・サインオンシステムがセションの管理を行なっている場合だけの制約です。

注3)match属性に指定された値は、大文字と小文字の区別が行われません。また、match属性に同一の値が指定されたselectタグが、1つのinputタグ内に複数定義されている場合には、最初に定義されたselectタグだけが有効となります。

注4)defaultタグを省略した場合、変換後にユーザ情報が出力されない場合があります。selectタグでユーザ情報が出力されない場合がある時は、defaultタグを必ず指定してください。

注5)以下の可変パラメタが使用できます。

  以下の属性が省略された場合、省略値に示した値が指定されたと見なします。

属性

省略値

param1

inputvalue

param2

localname

param3

partnername

  %から始まる書式指定子との対応付けは、param1、param2、param3属性で行ってください。


  相手シングル・サインオン名を1番目の書式指定子とし、入力データ値を2番目の書式指定子として扱う場合

<select match="roleA" param1="partnername" param2="inputvalue">%s_%s</select>

注6)以下の可変パラメタが使用できます。

  以下の属性が省略された場合、省略値に示した値が指定されたと見なします。

属性

省略値

param1

localname

param2

partnername

  %から始まる書式指定子との対応付けは、param1、param2属性で行ってください。


  相手シングル・サインオン名を1番目の書式指定子として扱う場合

<create param1="partnername">somewhere in %s</create>

注7)半角英数字、およびアンダスコア(_)が使用できます。先頭には英字を指定してください。なお、大文字と小文字の区別は行いません。また、以下の文字列は指定できません。

注8)本属性に設定する値は、認証サーバのInterstage管理コンソールを使用して以下の項目に設定してください。すでに認証サーバ間連携の設定が完了している場合は、以下の項目に設定されている値を本属性に設定してください。

  なお、本属性には1Byteから32Byteまでの半角の英数字、および以下の記号が指定できます。

注9)性能低下を招くため、運用時には使用しないでください。

ユーザ情報カスタマイズ定義ファイルの記述例


  ロール名、ユーザID、および利用者のDNを以下のように変換する場合の記述例を示します。

ユーザ情報

変換方法

自シングル・サインオンシステム

相手シングル・サインオンシステム

変換前

変換後

変換前

変換後

ロール名

“一般利用者”

“role_no_1”

“role_no_1”

“guest”

ユーザID

変換なし

ユーザID

partner_”+ユーザID

利用者のDN

変換なし

変換なし

【自シングル・サインオンシステム側のユーザ情報カスタマイズ定義ファイル例】
  相手シングル・サインオンシステム名に“systemB”を指定している例です。

<?xml version="1.0" encoding="Shift_JIS" ?>
<!-- XML宣言およびDTD修正禁止↓ -->
~省略~
<!-- XML宣言およびDTD修正禁止↑ -->
<SSOUserInfo>
    <Pluginlist>
    </Pluginlist>
    <Rulelist>
        <rule name="SendToSystemB">
            <USER_DN              transparent="true" />
            <ROLE_LIST>
                <input name="ROLE_LIST">
                    <select match="一般利用者">role_no_1</select>
                </input>
            </ROLE_LIST >
            <USER_ID              transparent="true" />
        </rule>
        <rule name="ReceivedFromSystemB">

~省略~

        </rule>
    </Rulelist>
    <Systemlist>
        <system name="systemB">
            <send    rule="SendToSystemB" debug="false" />
            <receive rule="ReceivedFromSystemB" debug="false" />
        </system>
    </Systemlist>
</SSOUserInfo>

【相手シングル・サインオンシステム側のユーザ情報カスタマイズ定義ファイル例】
  相手シングル・サインオンシステム名に“systemA”を指定している例です。

<?xml version="1.0" encoding="Shift_JIS" ?>
<!-- XML宣言およびDTD修正禁止↓ -->
~省略~
<!-- XML宣言およびDTD修正禁止↑ -->
<SSOUserInfo>
    <Pluginlist>
    </Pluginlist>
    <Rulelist>
        <rule name="ReceivedFromSystemA">
            <USER_DN              transparent="true" />
            <ROLE_LIST>
                <input name="ROLE_LIST">
                    <select match="role_no_1">guest</select>
                </input>
            </ROLE_LIST>
            <USER_ID>
                <input name="USER_ID">
                    <default param1="partner" param2="inputvalue">%s_%s</default>
                </input>
            </USER_ID>
        </rule>
        <rule name="SendToSystemA">

~省略~

        </rule>
    </Rulelist>
    <Systemlist>
        <system name="systemA">
            <send    rule="SendToSystemA" debug="false" />
            <receive rule="ReceivedFromSystemA" debug="false" />
        </system>
    </Systemlist>
</SSOUserInfo>

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

  Interstage シングル・サインオンでは、ユーザ情報を変換するカスタマイズモジュールを作成するためのJavaインタフェースクラスを提供します。(注)
  各クラスのAPI仕様については、マニュアルCDの“ApplicationServer\javadocs”フォルダに格納されているJavaDoc(javadocs_sso_federation)を参照してください。

インタフェース名

用途

説明

SSOUserInfoSender

送信用

本インタフェースを実装したクラスを作成し、変換を行うメソッドを実装することで、送信時のユーザ情報の変換を実現します。

SSOUserInfoReceiver

受信用

本インタフェースを実装したクラスを作成し、変換を行うメソッドを実装することで、受信時のユーザ情報の変換を実現します。

注)提供するクラスが前提とするJavaのバージョンは5.0以降です。

ユーザ情報

  Interstage シングル・サインオンでは、以下のユーザ情報を変換、および参照することができます。
  各ユーザ情報の詳細については、“6.2 環境変数によるユーザ情報の通知の設定”を参照してください。

ユーザ情報

変換

参照

利用者のDN

可能

可能

ロール名(注1)(注2)

可能

可能

利用者のユーザID

可能

可能

認証方式

不可

可能

クライアントのIPアドレス

不可

可能

認証時刻

不可

可能

再認証時刻

不可

可能

前回サインオン日時

不可

可能

拡張ユーザ情報

可能

可能

1)ロール名を変換することで、利用者のアクセスを制御することができます。例えば、以下のようにロール名を削除することで、ロールが設定されている保護リソースへのアクセスを拒否することができます。

public void modifyReceivedData (
    SSOUserInformation userInfo,
    SSOSystemInformation systemInfo )
    throws SSOCustomFailedException {

    // ロールの値を削除
    userInfo.removeRole();
}

2)ユーザ情報にロールセットが設定されている場合は、ロールセットに設定されているロール名が通知されます。

カスタマイズ手順

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

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

    • Interstage シングル・サインオンシステムB:user.custom.SSOUserInfoSenderSystemB (注1)

    • Interstage シングル・サインオンシステムC:user.custom.SSOUserInfoSenderSystemC (注1)

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

    • initSender

    • modifySendingData

    • destroySender
        

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

    • user.custom.SSOUserInfoReceiverSystemAll (注1)

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

    • initReceiver

    • modifyReceivedData

    • destroyReceiver
        

  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)ユーザ情報カスタマイズ定義ファイルに登録済みのクラスを修正した場合は、認証サーバ間連携サービスを再起動してください。認証サーバ間連携サービスの起動および停止については、“7.3.1 認証サーバ間連携サービスの起動・停止・削除”を参照してください。

実装例

  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(){
        // 必要に応じて、終了処理を実装
        
    }

}