Interstage Application Server アプリケーション作成ガイド (コンポーネントトランザクションサービス編)
|
目次
索引

|
5.4.3 プログラミングの流れ
(1) CORBAサービスの初期化
認証オブジェクトは、CORBAアプリケーションとして提供されるため、認証オブジェクトを使用するアプリケーションは、CORBAサービスを初期化する必要があります。
CORBAサービスの初期化の方法については、“アプリケーション作成ガイド(CORBAサービス編)”の、各プログラミング言語のクライアントアプリケーションの作成についての記述を参照してください。
(2) 認証オブジェクトのオブジェクトリファレンスの獲得
ネーミングサービスから、ASOのオブジェクトリファレンスを獲得します。各アプリケーションが使用する認証オブジェクトのネーミングサービスへの登録名からASOのオブジェクトリファレンスを獲得します。
(3) 認証オブジェクトへの認証依頼
認証オブジェクトを使用するアプリケーションは、利用者からの処理要求に対して、利用者の認証のために、認証オブジェクトに認証依頼を行います。
認証オブジェクトによる認証ではユーザ識別子による認証とユーザ名による認証の二種類があります。
ユーザの識別子による認証
ユーザの識別子により、認証オブジェクトに認証依頼を行うには、InfoDirectoryに登録したユーザの識別名(DN)とパスワードを指定する必要があります。このため、認証依頼を行うアプリケーションは、利用者からユーザの識別名を決定する情報とパスワードを入手する必要があります。そして、アプリケーションは、入手した情報からInfoDirectoryに登録したDNとパスワードを構成して、認証オブジェクトに認証依頼を行います。
ユーザのDNには1023バイト以内の文字列が使用可能です。パスワードには128バイト以内の文字列が使用可能です。ただし、パスワードにはASCIIコード系の文字以外は使用できません。
認証依頼は、認証オブジェクトのauth_check()オペレーションにより行います。
ユーザ名による認証
ユーザ名により認証のオブジェクトに認証依頼を行うには、認証オブジェクトのauth_check2()オペレーションにより行います。この場合ユーザ名には64バイト以内のASCII文字列が使用可能です。パスワードには64バイト以内の以内のASCII文字列が使用可能です。
注意
日本語を含むユーザ識別名を使用して認証依頼する場合、OD_CODE_SETによりクライアント側で使用するコード系を設定する必要があります。
各言語での使用方法を以下に示します。
注意
以降の使用方法で示すプログラミング例は、簡単化のため、エラー処理は省略しています。認証オブジェクトの各オペレーションの呼び出しはCORBAアプリケーションのオペレーション呼び出しとなるため、復帰値の判定の前に例外処理が必要です。CORBAのクライアントアプリケーションでの例外処理については、“アプリケーション作成ガイド(CORBAサービス編)”のクライアントアプリケーションの例外処理を参照してください。
CORBAサービスのクライアントアプリケーションのプログラミング例を示します。
ユーザDNおよびパスワードをプログラム固定としています。通常は、クライアントプログラム利用者からの入力となります。
ユーザの識別子による認証の場合
C言語
CORBA_Environment CoENV;
CORBA_Object CoOBJ; /* ASO の OR */
CORBA_long ret;
CORBA_string userDN;
CORBA_string password;
/* ユーザ識別名とパスワードの例 */
char *userDNdata = "cn=xyz,ou=dev,o=ABC,c=jp";
char *passworddata = "aaaa";
userDN = CORBA_string_alloc(strlen(userDNdata)+1);
password = CORBA_string_alloc(strlen(passworddata)+1);
strcpy(userDN,userDNdata);
strcpy(password,passworddata);
/* 認証オブジェクトへの認証依頼。*/
ret = ISTD_ASO_auth_check( CoOBJ,
userDN,
password,
&CoENV );
CORBA_free(userDN);
CORBA_free(password);
if(ret == ISTD_ASO_OK) {
/* 認証OK時の処理 */
}
else {
/* 認証NG時の処理 */
}
|
C++言語
CORBA::Environment env;
ISTD::ASO_ptr aso_ptr; // ASOのOR
CORBA::ULong ret;
CORBA::Char *userDN;
CORBA::Char *password;
CORBA::Long result;
// ユーザ識別名とパスワードの例
char *userDNdata = "cn=xyz,ou=dev,o=ABC,c=jp";
char *passworddata = "aaaa";
userDN = CORBA::string_alloc(strlen(userDNdata)+1);
password = CORBA::string_alloc(strlen(passworddata)+1);
strcpy(userDN,userDNdata);
strcpy(password,passworddata);
// 認証オブジェクトへの認証依頼
result = aso_ptr->auth_check(userDN,
password,
env );
CORBA::string_free( userDN );
CORBA::string_free( password );
// 認証結果の判定
if(result == 0) {
// 認証成功時の処理
}
else {
// 認証失敗時の処理
}
|
COBOL
WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY A-RESULT.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY TMP-STRING-LEN.
01 TMP-STRING-VA PIC X(50).
01 USERDN-P USAGE IS POINTER.
01 PASSWORD-P USAGE IS POINTER.
*--- ユーザ識別名とパスワードの例
MOVE "cn=xyz,ou=dev,o=ABC,c=jp" TO TMP-STRING-VA.
MOVE FUNCTION LENG(TMP-STRING-VA) TO TMP-STRING-LEN.
CALL "CORBA-STRING-SET" USING
USERDN-P
TMP-STRING-LEN
TMP-STRING-VA.
MOVE "aaaa" TO TMP-STRING-VA.
MOVE FUNCTION LENG(TMP-STRING-VA) TO TMP-STRING-LEN.
CALL "CORBA-STRING-SET" USING
PASSWORD-P
TMP-STRING-LEN
TMP-STRING-VA.
*--- 認証オブジェクトへの認証依頼
CALL "ISTD-ASO-AUTH-CHECK" USING
OBJ
USERDN-P
PASSWORD-P
ENV
A-RESULT.
CALL "CORBA-FREE" USING USERDN-P.
CALL "CORBA-FREE" USING PASSWORD-P.
IF A-RESULT = 0 THEN
*--- 認証成功時の処理
ELSE
*--- 認証失敗時の処理
END-IF.
|
Java
org.omg.CORBA.ORB Orb; // ORB用オブジェクトリファレンス
ISTD.ASO aso;
int res;
// ユーザ識別名とパスワードの例
String userDN = new String("cn=xyz,ou=dev,o=ABC,c=jp");
String password = new String("aaaa");
// 認証オブジェクトへの認証依頼
try {
res = aso.auth_check(userDN,password);
}catch( Exception e ) {
System.out.println("auth_check error.");
return;
}
if(res.value == 0) {
// 認証成功時の処理
}
else {
// 認証失敗時の処理
} |
ユーザ名による認証の場合
C言語
CORBA_Environment CoENV;
CORBA_Object CoOBJ; /* ASO の OR */
CORBA_long ret;
CORBA_string username;
CORBA_string password;
CORBA_string userbaseDN;
/* ユーザ名とパスワードの例 */
char *usernamedata = "taro";
char *passworddata = "aaaa";
char *userbaseDNdata = "ou=dev,o=ABC,c=jp";
username = CORBA_string_alloc(strlen(usernamedata)+1);
password = CORBA_string_alloc(strlen(passworddata)+1);
userbaseDN = CORBA_string_alloc(strlen(userbaseDNdata)+1);
strcpy(username,usernamedata);
strcpy(password,passworddata);
strcpy(userbaseDN,userbaseDNdata);
/* 認証オブジェクトへの認証依頼。*/
ret = ISTD_ASO_auth_check2( CoOBJ,
username,
password,
userbaseDN,
&CoENV );
CORBA_free(username);
CORBA_free(password);
CORBA_free(userbaseDN);
if(ret == ISTD_ASO_OK) {
/* 認証OK時の処理 */
}
else {
/* 認証NG時の処理 */
} |
C++言語
CORBA::Environment env;
ISTD::ASO_ptr aso_ptr; // ASOのOR
CORBA::ULong ret;
CORBA::Char *username;
CORBA::Char *password;
CORBA::Char *userbaseDN;
CORBA::Long result;
// ユーザ名とパスワードの例
char *usernamedata = "taro";
char *passworddata = "aaaa";
char *userbaseDNdata = "ou=dev,o=ABC,c=jp";
username = CORBA::string_alloc(strlen(usernamedata)+1);
password = CORBA::string_alloc(strlen(passworddata)+1);
userbaseDN = CORBA::string_alloc(strlen(userbaseDNdata)+1);
strcpy(username,usernamedata);
strcpy(password,passworddata);
strcpy(password,userbaseDNdata);
// 認証オブジェクトへの認証依頼
result = aso_ptr->auth_check2(username,
password,
userbaseDN,
env );
CORBA::string_free( username );
CORBA::string_free( password );
CORBA::string_free( userbaseDN );
// 認証結果の判定
if(result == 0) {
// 認証成功時の処理
}
else {
// 認証失敗時の処理
}
|
COBOL
WORKING-STORAGE SECTION.
COPY CONST IN CORBA.
01 COPY ENVIRONMENT IN CORBA REPLACING CORBA-ENVIRONMENT BY ENV.
01 COPY OBJECT IN CORBA REPLACING CORBA-OBJECT BY OBJ.
01 COPY LONG IN CORBA REPLACING CORBA-LONG BY A-RESULT.
01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY TMP-STRING-LEN.
01 TMP-STRING-VA PIC X(50).
01 USERNAME-P USAGE IS POINTER.
01 PASSWORD-P USAGE IS POINTER.
01 USERBASEDN-P USAGE IS POINTER.
*--- ユーザ名とパスワードの例
MOVE "taro" TO TMP-STRING-VA.
MOVE FUNCTION LENG(TMP-STRING-VA) TO TMP-STRING-LEN.
CALL "CORBA-STRING-SET" USING
USERNAME-P
TMP-STRING-LEN
TMP-STRING-VA.
MOVE "aaaa" TO TMP-STRING-VA.
MOVE FUNCTION LENG(TMP-STRING-VA) TO TMP-STRING-LEN.
CALL "CORBA-STRING-SET" USING
PASSWORD-P
TMP-STRING-LEN
TMP-STRING-VA.
MOVE "ou=dev,o=ABC,c=jp" TO TMP-STRING-VA.
MOVE FUNCTION LENG(TMP-STRING-VA) TO TMP-STRING-LEN.
CALL "CORBA-STRING-SET" USING
USERBASEDN-P
TMP-STRING-LEN
TMP-STRING-VA.
*--- 認証オブジェクトへの認証依頼
CALL "ISTD-ASO-AUTH-CHECK2" USING
OBJ
USERNAME-P
PASSWORD-P
USERBASEDN-P
ENV
A-RESULT.
CALL "CORBA-FREE" USING USERNAME-P.
CALL "CORBA-FREE" USING PASSWORD-P.
CALL "CORBA-FREE" USING USERBASEDN-P.
IF A-RESULT = 0 THEN
*--- 認証成功時の処理
ELSE
*--- 認証失敗時の処理
END-IF.
|
Java
org.omg.CORBA.ORB Orb; // ORB用オブジェクトリファレンス
ISTD.ASO aso;
int res;
// ユーザ名とパスワードの例
String username = new String("taro");
String password = new String("aaaa");
String userbaseDN = new String("ou=dev,o=ABC,c=jp");
// 認証オブジェクトへの認証依頼
try {
res = aso.auth_check2(username,password,userbaseDN);
}catch( Exception e ) {
System.out.println("auth_check2 error.");
return;
}
if(res.value == 0) {
// 認証成功時の処理
}
else {
// 認証失敗時の処理
} |
All Rights Reserved, Copyright (C) 富士通株式会社 2006