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

第5章 Interstageの特徴的な機能> 5.4 認証オブジェクトを使用するアプリケーションの作成

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