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

B.2 ユーザ情報をSSOリポジトリに登録する

  本記述例では、次の環境を想定しています。ご使用の環境にあわせて変更してください。


  CSVファイルにはパスワードが含まれます。CSVファイルを使用する際にはパスワードアタックへの対策を考慮し、取り扱いには十分注意してください。
  パスワードアタックへの対策については、“セキュリティシステム運用ガイド”の“セキュリティ侵害の脅威”-“Interstage シングル・サインオン”-“セキュリティ対策”を参照してください。

CSVファイルの記述


  CSVの形式は、カンマ(,)を区切りとしており、例では以下の順に指定しています。

  1. cn              2. sn           3. uid            4. userPassword
  5. employeeNumber  6. mail         7. ssoAuthType    8. ssoCredentialTTL
  9. ssoNotBefore   10. ssoNotAfter 11. ssoUserStatus 12. ssoRoleName

  なお、以下の例において1行目の数字は、上記属性との対応を示しています。実際のCSVファイルには記述しないでください。

       1          2      3     4      5             6                7             8           9         10  11   12
Fujitsu Tarou,Fujitsu,tarou,tarou,100001,tarou@jp.fujitsu.com,basicAuthOrCertAuth,60,20010101090000+0900,,good,Admin
Fujitsu Hanako,Fujitsu,Hanako,hanako,100002,hanako@jp.fujitsu.com,basicAuthOrCertAuth,60,20010101090000+0900,,good,Admin
Fujitsu Jirou,Fujitsu,Jirou,jirou,100003,jirou@jp.fujitsu.com,basicAuthOrCertAuth,60,20010101090000+0900,,good,Leader
                                       :
ユーザプログラムの記述

// CSVファイルの値と、属性の対応づけ
private static final int INDEX_CN = 0;
private static final int INDEX_SN = 1;
private static final int INDEX_UID = 2;
private static final int INDEX_USERPASSWORD = 3;
private static final int INDEX_EMPLOYEENUMBER = 4;
private static final int INDEX_MAIL = 5;
private static final int INDEX_SSOAUTHTYPE = 6;
private static final int INDEX_SSOCREDENTIALTTL = 7;
private static final int INDEX_SSONOTBEFORE = 8;
private static final int INDEX_SSONOTAFTER = 9;
private static final int INDEX_USERSTATUS = 10;
private static final int INDEX_SSOROLENAME = 11;
private static final int INDEX_RDN = 0;
private static final String [] attributeNames = {
    "cn",
    "sn",
    "uid",
    "userPassword",
    "employeeNumber",
    "mail",
    "ssoAuthType",
    "ssoCredentialTTL",
    "ssoNotBefore",
    "ssoNotAfter",
    "ssoUserStatus",
    "ssoRoleName"
};
【前処理】
// CSVファイルをオープンする(カレントのsimple.csvをオープン)
java.io.FileInputStream fis = new java.io.FileInputStream("sample.csv");
java.io.InputStreamReader isr = new java.io.InputStreamReader(fis);
java.io.BufferedReader br = new java.io.BufferedReader(isr);
// CSVファイルを1行ずつ読みながら処理する
String line;
String [] data;
while((line = br.readLine()) != null) {
        java.util.StringTokenizer st = new java.util.StringTokenizer(line, ",", true);
        int index = 0;
        java.util.ArrayList al = new java.util.ArrayList(64);
        al.add(0, null);
        String s;
        while(st.hasMoreTokens()) {
               s = st.nextToken();
               if(s.equals(",")) {
                       index++;
                       al.add(index, null);
               } else {
                       al.set(index, s);
               }
        }
 
        data = (String[])al.toArray(new String[0]);
        if( data == null || data.length == 0 ) {
               continue;
        }
 
        Attributes attrs = new BasicAttributes();
 
        Attribute objectClass = new BasicAttribute("objectClass");
        objectClass.add("top");
        objectClass.add("person");
        objectClass.add("organizationalPerson");
        objectClass.add("inetOrgPerson");
        objectClass.add("ssoUser");
        attrs.put(objectClass);
        // ssoRoleName までを設定する
        for(int i = 0; i < INDEX_SSOROLENAME; i++ ) {
               if( data[ i ] != null ) {
                       attrs.put( attributeNames[ i ], data[ i ] );
               }
        }
 
        // ssoRoleName を設定する
        Attribute ssoRoleName = new BasicAttribute( "ssoRoleName" );
        for(int i = INDEX_SSOROLENAME; i < data.length; i++ ) {
               if( data[ i ] != null ) {
                       ssoRoleName.add( data[ i ] );
               }
        }
        if( ssoRoleName.size() > 0 ) {
               attrs.put( ssoRoleName );
        }
        String dn = "cn=" + data[INDEX_RDN] + ",ou=User,ou=interstage,o=fujitsu,dc=com";
 
        ctx.createSubcontext( dn, attrs );
}
【後処理】