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言語

         void main(int argc, char **argv) {
         CORBA_Environment       CoENV;
         CORBA_Object            CoOBJ;            /* ASO の OR                   */
         CORBA_long  ret;
         CORBA_string userDN;
         CORBA_string password;
         CORBA_ORB    orb;
         CORBA_BOA    boa;
         CosNaming_NamingContext   cos_naming;
         CosNaming_Name            name;
         CosNaming_NameComponen    name_component;
         int   current_argc = argc;

         /* ユーザ識別名とパスワードの例 */   
         char           *userDNdata   = "cn=xyz,ou=dev,o=ABC,c=jp";
         char           *passworddata = "aaaa";

         orb = CORBA_ORB_init(&current_argc, argv, FJ_OM_ORBid, &CoEnv );
         boa = CORBA_ORB_BOA_init(orb, &current_argc,argv,CORBA_BOA_OAid, &CoEnv);
         cos_naming = CORBA_ORB_resolve_initial_references(orb,
                                  CORBA_ORB_ObjectId_NameService, &CoEnv);
         name._length = name._maximum = 1;
         name._buffer = &name_component;
         name_component.id = "ISTD::ASO";
         name_component.kind = "";
         CoOBJ = CosNaming_NamingContext_resolve(cos_naming,&name, &CoEnv);

         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++言語

         void main(int argc, char **argv) {
         CORBA::ORB_ptr orb;
         CORBA::BOA_ptr boa;
         CosNaming::Name_ptr name;
         CosNaming::NameComponent name_component;
         CosNaming::NameComponent_var ncvar;
         CORBA::Environment      env;
         ISTD::ASO_ptr           aso_ptr;          // ASOのOR
         CORBA::ULong            ret;

         CORBA::Char *userDN;
         CORBA::Char *password;
         CORBA::Long  result;

         orb = CORBA::ORB_init( current_argc, argv, FJ_OM_ORBid, env );
         boa = orb->BOA_init( current_argc, argv, CORBA_BOA_OAid, env );
         CORBA::Object_ptr obj = orb->resolve_initial_references(
                           CORBA_ORB_ObjectId_NameService, env );
         CosNaming::NamingContext_ptr NamingContext_obj=
                                 CosNaming::NamingContext::_narrow( obj );
         CORBA::release( obj );
         name_component.id = (const char *)"ISTD::ASO";
         name_component.kind = (const char *)"";
         ncvar = name_component;
         name = new CosNaming::Name(1, 1, &ncvar);
         obj = NamingContext_obj->resolve( *name, env );
         CORBA::release( NamingContext_obj );
         aso_ptr = ISTD::ASO::_narrow( obj );
         // ユーザ識別名とパスワードの例
         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

            ENVIRONMENT DIVISION.
            CONFIGURATION SECTION.
            SPECIAL-NAMES.
            ARGUMENT-NUMBER   IS ARG-C
            ARGUMENT-VALUE    IS ARG-V
            SYMBOLIC CONSTANT
            COPY SYMBOL-CONST IN CORBA.
            .

            WORKING-STORAGE SECTION.
            COPY CONST IN CORBA.

            01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB.
            01 COPY BOA IN CORBA REPLACING CORBA-BOA BY BOA.
            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 LONG IN CORBA REPLACING CORBA-LONG BY NUM.
            01 COPY BOOLEAN IN CORBAREPLACING CORBA-BOOLEAN BY RET.
            01 COPY LONG IN CORBA REPLACING CORBA-LONG BY I.
            01 BUFFER USAGE POINTER.
            01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY BUF-LENGTH.
            01 STR-BUF PIC X(30).
            01 COPY COSNAMING-NAMINGCONTEXT IN CORBA REPLACING
                     COSNAMING-NAMINGCONTEXT BY COS-NAMING.
            01 COPY COSNAMING-NAME IN CORBA REPLACING COSNAMING-NAME BY NAME.
            01 NAME-A USAGE POINTER.
            01 COPY COSNAMING-NAMECOMPONENT IN CORBA REPLACING
                     COSNAMING-NAMECOMPONENT BY NAME-COMPONENT.
            01 NAME-COMPONENT-A USAGE POINTER.
            01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY CURRENT-ARG-C.
            01 CURRENT-ARG-V.
                02 FILLER OCCURS 6.
                   03 CURRENT-ARG-V-VALUE USAGE POINTER.
            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.

            PROCEDURE DIVISION.
            ACCEPT CURRENT-ARG-C FROM ARG-C.
            COMPUTE CURRENT-ARG-C = CURRENT-ARG-C + 1.
            PERFORM VARYING ARG-COUNT FROM 1 BY 1 UNTIL ARG-COUNT > CURRENT-ARG-C
             IF ARG-COUNT = 1
              MOVE APLI-NAME TO TMP-STRING-BUF
             ELSE
              ACCEPT TMP-STRING-BUF FROM ARG-V
             END-IF
             MOVE FUNCTION LENG (TMP-STRING-BUF) TO STRING-LENGTH
             CALL "CORBA-STRING-SET" USING
                      CURRENT-ARG-V-VALUE (ARG-COUNT)
                      STRING-LENGTH
                      TMP-STRING-BUF
            END-PERFORM.
            SET CURRENT-ARG-V-VALUE (ARG-COUNT) TO NULL.
            MOVE 12 TO STRING-LENGTH.
            CALL "CORBA-STRING-SET" USING
                     TEMP-BUF
                     STRING-LENGTH
                     FJ-OM-ORB-ID.
            CALL "CORBA-ORB-INIT" USING
                     CURRENT-ARG-C
                     CURRENT-ARG-V
                     TEMP-BUF
                     ENV
                     ORB.
            CALL "CORBA-FREE" USING TEMP-BUF.
            MOVE 15 TO STRING-LENGTH.
            CALL "CORBA-STRING-SET" USING
            TEMP-BUF
            STRING-LENGTH
            CORBA-BOA-OA-ID.
            CALL "CORBA-ORB-BOA-INIT" USING
                     ORB
                     CURRENT-ARG-C
                     CURRENT-ARG-V
                     TEMP-BUF
                     ENV
                     BOA.
            CALL "CORBA-FREE" USING TEMP-BUF.
            MOVE FUNCTION LENG ( CORBA-ORB-OBJECTID-NAMESERVICE ) TO STRING-LENGTH.
            CALL "CORBA-STRING-SET" USING
                     TEMP-BUF
                     STRING-LENGTH
                     CORBA-ORB-OBJECTID-NAMESERVICE.
            CALL "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" USING
                     ORB
                     TEMP-BUF
                     ENV
                     COS-NAMING.
            CALL "CORBA-FREE" USING TEMP-BUF.
            MOVE FUNCTION LENG (STR-BUF) TO STRING-LENGTH.
            MOVE "ISTD::ASO" TO STR-BUF.
            CALL "CORBA-STRING-SET" USING
                     IDL-ID OF NAME-COMPONENT
                     STRING-LENGTH
                     STR-BUF.
            MOVE " " TO STR-BUF.
            CALL "CORBA-STRING-SET" USING
                     KIND OF NAME-COMPONENT
                     STRING-LENGTH
                     STR-BUF.
            MOVE 1 TO SEQ-LENGTH OF NAME.
            MOVE 1 TO SEQ-MAXIMUM OF NAME.
            MOVE 1 TO NUM.
            CALL "CORBA-SEQUENCE-COSNAMING-NAMECOMPONENT-ALLOCBUF" USING
                     SEQ-MAXIMUM OF NAME
                     SEQ-BUFFER OF NAME.
            MOVE FUNCTION ADDR ( NAME ) TO NAME-A.
            MOVE FUNCTION ADDR ( NAME-COMPONENT ) TO NAME-COMPONENT-A.
            CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
                     NAME-A
                     NUM
                     NAME-COMPONENT-A.
            CALL "COSNAMING-NAMINGCONTEXT-RESOLVE" USING
                     COS-NAMING
                     NAME
                     ENV
                     OBJ.
       *--- ユーザ識別名とパスワードの例
            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");
       Orb = CORBA.ORB.init( arg, "FJ OM ORBid" );
       CORBA.String NSname= new CORBA.String(Orb.ObjectId_NameService);
       CORBA.Object _tmpObj = Orb.resolve_initial_references(NSname);
       Cos = CosNaming.NamingContext_var.narrow(_tmpObj);
       CosNaming.Istring NCid = new CosNaming.Istring("ISTD::ASO");
       CosNaming.Istring NCkind = new CosNaming.Istring("");
       CosNaming.Name NCo = new CosNaming.Name(2);
       NCo.value[0] = new CosNaming.NameComponent( NCid, NCkind );
       Obj = Cos.resolve( NCo );
       aso = ISTD.ASO_var.narrow(Obj);
       // 認証オブジェクトへの認証依頼
       try {
          res = aso.auth_check(userDN,password);
       }catch( Exception e ) {
          System.out.println("auth_check error.");
          return;
       }
  
       if(res == 0) {
           // 認証成功時の処理
       }
       else {
           // 認証失敗時の処理
       }

ユーザ名による認証の場合

C言語

         void main(int argc, char **argv) {
         CORBA_Environment       CoENV;
         CORBA_Object            CoOBJ;            /* ASO の OR                   */
         CORBA_long  ret;
         CORBA_ORB   orb;
         CORBA_BOA   boa;
         CosNaming_NamingContext   cos_naming;
         CosNaming_Name  name;
         CosNaming_NameComponent   name_component;
         int current_argc = argc;

         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";
         orb = CORBA_ORB_init(&current_argc, argv, FJ_OM_ORBid, &CoEnv );
         boa = CORBA_ORB_BOA_init(orb, &current_argc,argv,CORBA_BOA_OAid, &CoEnv);
         cos_naming = CORBA_ORB_resolve_initial_references(orb,
                           CORBA_ORB_ObjectId_NameService, &CoEnv);
         name._length = name._maximum = 1;
         name._buffer = &name_component;
         name_component.id = "ISTD::ASO";
         name_component.kind = "";
         CoOBJ = CosNaming_NamingContext_resolve(cos_naming,&name, &CoEnv);
         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++言語

         void main( int argc, char *argv[] ){
         CORBA::ORB_ptr         orb;
         CORBA::BOA_ptr         boa;
         CosNaming::Name_ptr    name;
         CosNaming::NameComponentname_component;
         CosNaming::NameComponent_var ncvar;
         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";

         orb = CORBA::ORB_init( current_argc, argv, FJ_OM_ORBid, env );
         boa = orb->BOA_init( current_argc, argv, CORBA_BOA_OAid, env );
         CORBA::Object_ptr obj = orb->resolve_initial_references(
                CORBA_ORB_ObjectId_NameService, env );
         CosNaming::NamingContext_ptr NamingContext_obj=
                           CosNaming::NamingContext::_narrow( obj );
         CORBA::release( obj );
         name_component.id = (const char *)"ISTD::ASO";
         name_component.kind = (const char *)"";
         ncvar = name_component;
         name = new CosNaming::Name(1, 1, &ncvar);
         obj = NamingContext_obj->resolve( *name, env );
         CORBA::release( NamingContext_obj );
         aso_ptr = ISTD::ASO::_narrow( obj );
         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

            ENVIRONMENT DIVISION.
            CONFIGURATION SECTION.
            SPECIAL-NAMES.
            ARGUMENT-NUMBER  IS ARG-C
            ARGUMENT-VALUE   IS ARG-V
            SYMBOLIC CONSTANT
            COPY SYMBOL-CONST IN CORBA.
            .

            WORKING-STORAGE SECTION.
            COPY CONST IN CORBA.

            01 COPY ORB IN CORBA REPLACING CORBA-ORB BY ORB.
            01 COPY BOA IN CORBA REPLACING CORBA-BOA BY BOA.
            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 LONG IN CORBA REPLACING CORBA-LONG BY NUM.
            01 COPY BOOLEAN IN CORBAREPLACING CORBA-BOOLEAN BY RET.
            01 COPY LONG IN CORBA REPLACING CORBA-LONG BY I.
            01 BUFFER USAGE POINTER.
            01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY BUF-LENGTH.
            01 STR-BUF PIC X(30).
            01 COPY COSNAMING-NAMINGCONTEXT IN CORBA REPLACING
                     COSNAMING-NAMINGCONTEXT BY COS-NAMING.
            01 COPY COSNAMING-NAME IN CORBA REPLACING COSNAMING-NAME BY NAME.
            01 NAME-A USAGE POINTER.
            01 COPY COSNAMING-NAMECOMPONENT IN CORBA REPLACING
                     COSNAMING-NAMECOMPONENT BY NAME-COMPONENT.
            01 NAME-COMPONENT-A USAGE POINTER.
            01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY CURRENT-ARG-C.
            01 CURRENT-ARG-V.
                02 FILLER OCCURS 6.
                   03 CURRENT-ARG-V-VALUE USAGE POINTER.
            01 COPY ULONG IN CORBA REPLACING CORBA-UNSIGNED-LONG BY TMP-STRING-LEN.
            01 TMP-STRING-VA    PIC X(50).

            01 COPY ULONG   IN CORBA REPLACING CORBA-UNSIGNED-LONG BY TMP-STRING-LEN.
          
            01 USERNAME-P         USAGE IS POINTER.
            01 PASSWORD-P         USAGE IS POINTER.
            01 USERBASEDN-P       USAGE IS POINTER.

            PROCEDURE DIVISION.
            ACCEPT CURRENT-ARG-C FROM ARG-C.
            COMPUTE CURRENT-ARG-C = CURRENT-ARG-C + 1.
            PERFORM VARYING ARG-COUNT FROM 1 BY 1 UNTIL ARG-COUNT > CURRENT-ARG-C
             IF ARG-COUNT = 1
              MOVE APLI-NAME TO TMP-STRING-BUF
             ELSE
              ACCEPT TMP-STRING-BUF FROM ARG-V
             END-IF
             MOVE FUNCTION LENG (TMP-STRING-BUF) TO STRING-LENGTH
             CALL "CORBA-STRING-SET" USING
                   CURRENT-ARG-V-VALUE (ARG-COUNT)
                   STRING-LENGTH
                   TMP-STRING-BUF
            END-PERFORM.
            SET CURRENT-ARG-V-VALUE (ARG-COUNT) TO NULL.
            MOVE 12 TO STRING-LENGTH.
            CALL "CORBA-STRING-SET" USING
                   TEMP-BUF
                   STRING-LENGTH
                   FJ-OM-ORB-ID.
            CALL "CORBA-ORB-INIT" USING
                   CURRENT-ARG-C
                   CURRENT-ARG-V
                   TEMP-BUF
                   ENV
                   ORB.
            CALL "CORBA-FREE" USING TEMP-BUF.
            MOVE 15 TO STRING-LENGTH.
            CALL "CORBA-STRING-SET" USING
                   TEMP-BUF
                   STRING-LENGTH
                   CORBA-BOA-OA-ID.
            CALL "CORBA-ORB-BOA-INIT" USING
                   ORB
                   CURRENT-ARG-C
                   CURRENT-ARG-V
                   TEMP-BUF
                   ENV
                   BOA.
            CALL "CORBA-FREE" USING TEMP-BUF.
            MOVE FUNCTION LENG ( CORBA-ORB-OBJECTID-NAMESERVICE ) TO STRING-LENGTH.
            CALL "CORBA-STRING-SET" USING
                   TEMP-BUF
                   STRING-LENGTH
                   CORBA-ORB-OBJECTID-NAMESERVICE.
            CALL "CORBA-ORB-RESOLVE-INITIAL-REFERENCES" USING
                   ORB
                   TEMP-BUF
                   ENV
                   COS-NAMING.
            CALL "CORBA-FREE" USING TEMP-BUF.
            MOVE FUNCTION LENG (STR-BUF) TO STRING-LENGTH.
            MOVE "ISTD::ASO" TO STR-BUF.
            CALL "CORBA-STRING-SET" USING
                   IDL-ID OF NAME-COMPONENT
                   STRING-LENGTH
                   STR-BUF.
            MOVE " " TO STR-BUF.
            CALL "CORBA-STRING-SET" USING
                   KIND OF NAME-COMPONENT
                   STRING-LENGTH
                   STR-BUF.
            MOVE 1 TO SEQ-LENGTH OF NAME.
            MOVE 1 TO SEQ-MAXIMUM OF NAME.
            MOVE 1 TO NUM.
            CALL "CORBA-SEQUENCE-COSNAMING-NAMECOMPONENT-ALLOCBUF" USING
                   SEQ-MAXIMUM OF NAME
                   SEQ-BUFFER OF NAME.
            MOVE FUNCTION ADDR ( NAME ) TO NAME-A.
            MOVE FUNCTION ADDR ( NAME-COMPONENT ) TO NAME-COMPONENT-A.
            CALL "CORBA-SEQUENCE-ELEMENT-SET" USING
                   NAME-A
                   NUM
                   NAME-COMPONENT-A.
            CALL "COSNAMING-NAMINGCONTEXT-RESOLVE" USING
                   COS-NAMING
                   NAME
                   ENV
                   OBJ.

       *--- ユーザ名とパスワードの例
            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;

         Orb = CORBA.ORB.init( arg, "FJ OM ORBid" );
         CORBA.String NSname= new CORBA.String(Orb.ObjectId_NameService);
         CORBA.Object _tmpObj = Orb.resolve_initial_references(NSname);
         Cos = CosNaming.NamingContext_var.narrow(_tmpObj);
         CosNaming.Istring NCid = new CosNaming.Istring("ISTD::ASO");
         CosNaming.Istring NCkind = new CosNaming.Istring("");
         CosNaming.Name NCo = new CosNaming.Name(2);
         NCo.value[0] = new CosNaming.NameComponent( NCid, NCkind );
         Obj = Cos.resolve( NCo );
          aso = ISTD.ASO_var.narrow(Obj);

         // ユーザ名とパスワードの例
          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 == 0) {
            // 認証成功時の処理
          }
          else {
            // 認証失敗時の処理
          }

目次 索引 前ページ次ページ

All Rights Reserved, Copyright (C) 富士通株式会社 2005