Interstage Application Server シングル・サインオン運用ガイド |
目次
索引
![]() ![]() |
付録B ユーザプログラムの記述例 |
本記述例では、次の環境を想定しています。ご使用の環境にあわせて変更してください。
CSVファイルにはパスワードが含まれます。CSVファイルを使用する際にはパスワードアタックへの対策を考慮し、取り扱いには十分注意してください。
パスワードアタックへの対策については、“セキュリティシステム運用ガイド”の“セキュリティ侵害の脅威”−“Interstage シングル・サインオン”−“セキュリティ対策”を参照してください。
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 ); } : 【後処理】 |
目次
索引
![]() ![]() |