API拡張機能の使用この章では、標準のディレクトリAPIにJavaの拡張機能を使用して、第3章で紹介した多くの操作を実行する方法について説明します。この章では使用例を示します。Directory』を参照してください。この章の項目は次のとおりです。APIとともにインストールされます。APIとその拡張機能は、$ORACLE_HOME/jlib/ldapjclnt10.jarにあります。oracle.ldap.utilパッケージを使用したLDAPオブジェクトのモデル化Javaでは、LDAPエンティティ(ユーザー、グループ、レルム、アプリケーション)は、ハンドルではなくJavaオブジェクトとしてモデル化されます。このモデル化は、oracle.java.utilパッケージで行われます。他のすべてのユーティリティ機能は、個々のオブジェクトとして(GUIDなど)、あるいはユーティリティ・クラスの静的メンバー関数としてモデル化されます。ユーザーを認証するには、アプリケーションは次の手順に従います。指定されたユーザー識別名で、oracle.ldap.util.Userオブジェクトを作成します。JNDIオブジェクトを作成するか、あるいはDirContextオブジェクトのプールからJNDIオブジェクトを取得します。User.authenticateUserメソッドを呼び出して、DirContextオブジェクトおよびユーザー資格証明への参照を渡します。既存のDirContextオブジェクトのプールから取得したDirContextオブジェクトは、そのプールに戻します。CやPL/SQLのプログラマとは異なり、Javaプログラマはオブジェクトを明示的に解放する必要がありません。このタスクは、Javaのガベージ・コレクション・メカニズムが実行します。PropertySetCollection、PropertySetおよびPropertyクラスUserクラス、SubscriberクラスおよびGroupクラスのほとんどのメソッドは、PropertySetCollectionオブジェクトを戻します。このオブジェクトは、1つ以上のLDAPエントリの集合を表しています。各エントリはPropertySetオブジェクトで表され、識別名で識別されます。PropertySetには、Propertyとして表される属性が含まれる場合があります。Propertyとは、そのPropertyが表す特定の属性に関する1つ以上の値の集合です。次に、これらのクラスの使用例を示します。}}エンティティmyuserは、Userオブジェクトです。pscオブジェクトには、myuserが属するネストされたグループがすべて含まれます。このコードは結果エントリをループし、各エントリのオブジェクト・クラス値をすべて出力します。ユーザーの管理ユーザー関連機能はすべてoracle.ldap.util.UserというJavaクラスで抽象化されます。このプロセスは、次のようになります。識別名、GUIDまたは単純な名前に基づいて、oracle.ldap.util.Userオブジェクトを構成します。Object)を呼び出して、ユーザーを認証します。User.getProperties(DirContext)を呼び出して、ユーザー・エントリの属性を取得します。String[])を起動してユーザーの拡張プロパティを取得します。intはsharedまたはapplication-specificのどちらかです。String[]は必要なプロパティのタイプを表すオブジェクトです。String[]がnullの場合、指定されたカテゴリのすべてのプロパティが取得されます。PropertySetCollection.getProperties(int)を呼び出して、手順4で戻されたプロパティの解析に必要なメタデータを取得します。拡張プロパティを解析し、アプリケーション固有のロジックを続行します。この解析は、アプリケーション固有のロジックによっても行われます。ユーザーの認証ユーザー認証は、ユーザーがログイン時に指定した資格証明とそのユーザーのディレクトリ内の資格証明を比較する一般的なLDAP操作です。Directoryでは、次のものがサポートされています。認証時に使用可能な任意の属性。認証メソッドによって戻される任意のパスワード・ポリシー例外。パスワード・ポリシーはuserpassword属性のみに適用されることに注意してください。次に、APIを使用してユーザーを認証するためのコード例を示します。ユーザーの作成subscriberクラスによってcreateUser()メソッドが使用され、プログラムによりユーザーが作成されます。Servicesを介して設定可能です。createUser()メソッドは、ユーザーの作成時に、クライアントが要件を理解し必須の属性に対して値を提供することを前提にしています。プログラマによって必須情報が提供されない場合、サーバーはエラーを戻します。コード例の次のスニペットは、使用方法を示します。ユーザー・オブジェクトの取得subscriberクラスによってgetUser()メソッドが提供され、Userクラスのパブリック・コンストラクタと置き換えられます。このメソッドは、指定された情報に基づいてUserオブジェクトを戻します。次に、使用方法を示します。APIを使用してアイデンティティ管理レルムのオブジェクトを取得する方法について説明します。RootOracleContextクラスはルートOracleコンテキストを表します。アイデンティティ管理レルムの作成に必要な情報のほとんどは、ルートOracleコンテキストに格納されています。RootOracleContextクラスではgetSubscriber()メソッドが提供されます。このメソッドは、subscriberクラスのパブリック・コンストラクタと置き換えられ、指定された情報に基づいてアイデンティティ管理レルム・オブジェクトを戻します。次に、使用方法を示します。次の例では、単純な名前、GUIDまたはDNがわかっている場合にユーザーのログイン名を検索する方法を示します。Sign-Onのログイン名は、ニックネームとも呼ばれます。この例は、2つの部分から構成されています。このレルムへのニックネームの保存に使用されている属性を確認します。ユーザー・オブジェクトを取得し、ニックネーム属性の値を確認します。次の新しいJavaクラス(パブリック・クラス)が導入されました。oracle.ldap.util.discovery.DiscoveryHelperこのクラスでは、指定されたソースから特定の情報を検出するメソッドが提供されます。ディレクトリ・サーバー検出のメソッドメソッド説明discover指定されたソースから特定の情報を検出します。setProperty検出に必要なプロパティを設定します。getPropertyプロパティの値にアクセスします。既存のJavaクラスoracle.ldap.util.jndi.ConnectionUtilに、次の2つの新しいメソッドが追加されます。オーバーロードされたこのファンクションでは、oracle.ldap.util.discovery.DiscoveryHelper.discover()に対して内部コールを実行して、SSL以外のLDAPサーバーのホスト名およびポート情報が判断されます。オーバーロードされたこのファンクションでは、oracle.ldap.util.discovery.DiscoveryHelper.discover()に対して内部コールを実行して、SSLのLDAPサーバーのホスト名およびポート情報が判断されます。次に、ディレクトリ・サーバー検出に使用するJavaプログラムの例を示します。Digest-MD5を使用したSASL認証の実行JNDIを使用してSASL接続を確立する場合、javax.naming.Contextの次のプロパティを設定する必要があります。Context.SECURITY_AUTHENTICATIONに「DIGEST-MD5」を設定します。Context.SECURITY_PRINCIPAL後者にはプリンシパル名を設定します。この名前は、サーバー固有の形式です。次のいずれかのようになります。companyなど)のみを受け入れます。注意:SASL識別名は、SASLバインドをコールするAPIに渡される前に正規化される必要があります。Directoryでは正規化された識別名のみがサポートされます。LDAP/JNDIの例を示します。5805に定義されているトランザクションをサポートしています。Transactions』(http://www.ietf.org)トランザクションはプロビジョニングなどいくつかのアプリケーションをサポートする必要があります。トランザクションがコミットされた場合、トランザクション更新内のすべての操作が成功するか、すべて失敗するかのいずれかです。Directoryは、拡張操作およびコントロールのオブジェクト識別子を、ルートDSEでsupportedExtensionおよびsupportedControlとして公開します。LDAPトランザクションは次のエンティティを使用します。トランザクション開始に関連した操作のグループ化を容易にするLDAP拡張操作です。extendedReqのLDAPMessageです。Directoryサーバーから送信されます。extendedResのLDAPMessageです。このresponseNameは存在しません。成功した場合、resultCode(0)、responseValueは存在しトランザクション識別子を保持しています。リクエスト形式が不正などの理由で失敗した場合、responseValueは存在しません。このコントロールの値であるトランザクション識別子により、操作とトランザクションの関連を示すLDAPControlです。このcriticalityはTRUEです。トランザクションの終了を示すために使用される、もう1つのLDAP拡張操作です。このトランザクションの処理(トランザクションのコミットまたは中断)を示します。extendedReqを保持し、BERでエンコードされたトランザクション・リクエストを格納します。コミットの値がTRUEの場合、識別子で識別されたトランザクションをコミットするリクエストです。コミットの値がFALSEの場合、識別されたトランザクションを中断するリクエストです。Directoryサーバーのトランザクション終了リクエストへのLDAPMessageレスポンスです。このレスポンス名は存在しません。responseValueが存在する場合、これにはBERでエンコードされたトランザクション・レスポンスが格納されます。トランザクション識別子を含む、responseNameが1.3.6.1.1.21.4でresponseValueが存在する要求に基づかない通知メッセージです。Directoryサーバーとクライアント間のリクエストおよびレスポンスの順序を次に示します。Directoryサーバーにトランザクション開始リクエストを発行します。Directoryサーバーが、トランザクション開始レスポンスにトランザクション識別子を設定し、成功のresultCode(0)でこのリクエストに応答します。不正な形式のリクエストなどの理由で失敗した場合、サーバーはエラーの種類を示す成功以外のresultCodeを含むトランザクション開始レスポンスで応答します。成功した場合に生成されてクライアントに送信されるこのトランザクション識別子は、後続のプロトコル・メッセージでこのトランザクションを識別するために使用されます。クライアントはサーバーから成功の結果コードを受け取ると、トランザクション識別子を持ったトランザクション仕様コントロールを各更新操作に添付して、単一トランザクションの一部として処理される操作であることを示します。Directoryは成功を送信します。無効の場合、エラーの種類の詳細とともにresultCodeを含む、リクエストへの適切なレスポンスをクライアントに送信します。Directoryサーバーに送信し、トランザクションの処理を要求します。コミットの値がTRUEの場合はトランザクションをコミットするリクエストを表し、値がFALSEの場合はトランザクションを中断するリクエストを表します。Directoryサーバーは識別されたトランザクションを構成するすべての操作を破棄してトランザクションを中断し、成功のresultCode(0)を含むトランザクション終了レスポンスを返すことで処理の完了を表します。DirectoryサーバーはDBに対して、トランザクション内のすべての操作に対して行った更新をコミットします。成功した場合、サーバーは、成功のresultCode(0)を含むトランザクション終了レスポンスを戻します。失敗した場合は、失敗の種類を表す成功以外のresultCodeを含むトランザクション終了レスポンスを戻します。トランザクション外でリクエストされたトランザクションや更新をサーバーがシリアライズする必要はありません。サーバーは1つ以上のクライアントからの異なるエントリ・セット上で動作する複数のコミット・リクエストを同時に処理することがあります。前述のクライアントとサーバーとのやりとりの際、サーバーがトランザクションの仕様を継続できなくなった場合、サーバーはトランザクション中断通知を発行します。この通知を受信すると、クライアントはトランザクション識別子の使用をすべて中止する必要があり、トランザクションはnullおよびvoidとなります。トランザクションの一部として処理が予定されていたすべての操作は暗黙的に破棄されます。Directoryサーバーからは失敗のresultCodeを含むレスポンスが戻されます。Directoryサーバーへの接続を閉じた場合、サーバーは必要な接続関連のクリーンアップを実行します。LDAPトランザクションの使用この項では、LDAP拡張操作を使用したJNDIベースのLDAPトランザクションJavaクライアント・モジュールの開発に必要な手順の簡単なアウトラインを説明します。手順では、トランザクション開始リクエスト、トランザクション開始レスポンス、トランザクション終了リクエストおよびトランザクション終了レスポンスの4つのインタフェースの実装を行います。これら4つのインタフェースを実装するクラスは、トランザクション・セマンティクス内でLDAP更新操作を実行するコードで使用される必要があります。次のサンプルのコード・スニペットは、実装される4つのインタフェースと、トランザクション・セマンティクスでのLDAP更新操作のサンプルにおけるこれらの使用方法を示します。reserved.法律上の。