Oracle Fusion Middleware Oracle Identity Managementアプリケーション開発者ガイド 11gリリース1(11.1.1) B56242-01 |
|
戻る |
次へ |
この章では、JavaおよびPL/SQL LDAP APIに対するOracleの拡張機能について説明します。第5章ではJavaの拡張機能について説明します。第6章ではPL/SQLの拡張機能について説明します。C APIに対する拡張機能は、Oracleではサポートされません。
この章では、次の項目について説明します。
サンプル・コードは次のURLで入手できます。
http://www.oracle.com/technology/sample_code/
「Sample Applications—Fusion Middleware」の下の「Oracle Identity Management」リンクを探してください。
オラクル社が既存のAPIに追加したAPIは、次の機能を実現します。
ユーザー管理
アプリケーションで各種ユーザー・プロパティを設定または取得できます。
グループ管理
アプリケーションでグループ・プロパティの問合せができます。
レルム管理
アプリケーションでアイデンティティ管理レルムに関するプロパティを設定または取得できます。
サーバー検出管理
アプリケーションでドメイン・ネーム・システム(DNS)のディレクトリ・サーバーの位置を特定できます。
この後の各項では、これらの機能を1つずつ詳細に解説します。一般的なタスク(接続の確立およびクローズ、APIの拡張機能で検索できないディレクトリ・エントリの検索など)については、基礎となるAPIをアプリケーションで使用する必要があります。
図4-1に、APIの拡張機能を使用した場合のプログラム・フローを示します。
図4-1に示すように、アプリケーションはまずOracle Internet Directoryへの接続を確立します。その後、標準的なAPIファンクションとAPIの拡張機能を区別なく使用できます。
アプリケーションがLDAP APIとその拡張機能を使用するためには、LDAP接続を確立する必要があります。接続が確立されたら、操作を実行する権限を得る必要があります。しかし、アプリケーションのアイデンティティがディレクトリにない場合は、どちらのタスクも実行できません。
ディレクトリにアプリケーションのアイデンティティを作成するのは比較的簡単です。このようなエントリに必要なのは、orclApplicationEntity
とtop
の2つのオブジェクト・クラスのみです。Oracle Directory ManagerまたはLDIFファイルを使用してエントリを作成できます。LDIF表記法では、エントリは次のようになります。
dn: orclapplicationcommonname=application_name changetype: add objectclass:top objectclass: orclApplicationEntity userpassword: password
userpassword
に指定する値は、アプリケーションがディレクトリへのバインドに使用する値です。
アプリケーションに割り当てることのできる権限の詳細は、『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』のOracleテクノロジ・デプロイメントのための権限の委任に関する章を参照してください。正しい権限セットが特定できたら、アプリケーション・エンティティの識別名を適切なディレクトリ・グループに追加します。前述のドキュメントでは、Oracle Directory Services Managerまたはldapmodify
コマンドを使用してこのタスクを実行する方法が説明されています。
この項では、LDAP APIのユーザー管理機能について説明します。
ディレクトリ対応アプリケーションは、次の操作を実行する必要があります。
ユーザー・エントリのプロパティの取得
このプロパティは、姓や自宅の住所などと同じ方法で、ユーザー・エントリ自体の属性として格納されています。
拡張ユーザー・プリファレンスの取得
このプリファレンスはユーザーに適用されますが、ユーザー・エントリを含むDITとは異なるDITに格納されています。拡張ユーザー・プリファレンスは、すべてのアプリケーションに共通のユーザー・プロパティ、または1つのアプリケーションに固有のユーザー・プロパティです。前者のタイプのプロパティは、Oracleコンテキストの共通の位置に格納されています。後者のタイプのプロパティは、アプリケーション固有のDITに格納されています。
ユーザーのグループ・メンバーシップの問合せ
単純な名前と資格証明が与えられたユーザーの認証
通常、アプリケーションは完全に修飾された識別名、GUIDまたは単純なユーザー名を使用してユーザーを識別します。ホスト環境では、ユーザー名とレルム名の両方を識別に使用することがあります。
Oracle Internet Directoryでは、グループは識別名の集合としてモデル化されます。ディレクトリ対応のアプリケーションは、グループのプロパティを取得し、特定のユーザーがそのグループのメンバーであることを検証するために、Oracle Internet Directoryにアクセスする必要があります。
通常、グループは次のいずれかを使用して識別されます。
完全に修飾されたLDAP識別名
Global Unique Identifier
単純なグループ名とサブスクライバ名
アイデンティティ管理レルムは、多数のOracle製品によって提供されるサービスをサブスクライブするエンティティまたは組織です。ディレクトリ対応のアプリケーションは、レルム・プロパティ(ユーザー検索ベースやパスワード・ポリシーなど)を取得するために、Oracle Internet Directoryにアクセスする必要があります。
通常、レルムは次のいずれかを使用して識別されます。
完全に修飾されたLDAP識別名
Global Unique Identifier
単純な企業名
ディレクトリ・サーバー検出(DSD)を使用すると、ディレクトリ・クライアントによってOracleディレクトリ・サーバーを自動検出できます。これにより、デプロイメント内で、ディレクトリのホスト名およびポート番号情報を中央のDNSサーバーで管理できます。すべてのディレクトリ・クライアントが実行時にDNS問合せを行い、ディレクトリ・サーバーに接続します。ディレクトリ・サーバーの位置情報は、DNSサービス位置レコード(SRV)を使用して格納されます。
SRVには次のものが含まれます。
LDAPサービスを提供するサーバーのDNS名
対応するポートのポート番号
クライアントが複数のサーバーから適切なサーバーを選択できるようにする任意のパラメータ
また、DSDによって、クライアントがldap.ora
ファイル自体からディレクトリのホスト名情報を検出できます。
この項では、次の項目について説明します。
関連項目:
|
通常、LDAPホスト名およびポート情報は、$ORACLE_HOME/network/admin
のクライアント上に格納されているldap.ora
という名前のファイルで静的に提供されます。多数のクライアントを持つ大規模なデプロイメントの場合、この情報の管理は非常に煩雑になります。たとえば、ディレクトリ・サーバーのホスト名またはポート番号が変更されるたびに、各クライアントのldap.ora
ファイルを変更する必要があります。
ディレクトリ・サーバー検出を使用すると、ldap.ora
ファイルのホスト名およびポート番号を管理する必要がなくなります。ホスト名情報は中央のDNSサーバーに格納されているため、更新するのは1回のみです。すべてのクライアントで、接続時にDNSから新しいホスト名情報を動的に検出できます。
DSDでは、取得する際に使用するメカニズムや規格にかかわらず、ディレクトリ・サーバー情報の取得に単一のインタフェースが提供されます。現在、Oracleディレクトリ・サーバーの情報は、DNSまたはldap.ora
のいずれかから単一のインタフェースを使用して取得できます。
ホスト名情報を検出するには、まず検出ハンドルを作成します。検出ハンドルは、ホスト名情報の検出元を指定します。Java APIの場合、検出ハンドルを作成するにはoracle.ldap.util.discovery.DiscoveryHelper
クラスのインスタンスを作成します。
DiscoveryHelper disco = new DiscoveryHelper(DiscoveryHelper.DNS_DISCOVER);
引数DiscoveryHelper.DNS_DISCOVER
は、ソースを指定します。この場合、ソースはDNSです。
各ソースには、ホスト名情報を検出するために指定するいくつかの入力項目があります。DNSの場合、入力項目は次のとおりです。
ドメイン名
検出メソッド
SSLモード
これらのオプションの詳細は、「DNSからのサーバー名およびポート番号の判断」を参照してください。
// Set the property for the DNS_DN disco.setProperty(DiscoveryHelper.DNS_DN,"dc=us,dc=fiction,dc=com"); // Set the property for the DNS_DISCOVER_METHOD disco.setProperty(DiscoveryHelper.DNS_DISCOVER_METHOD ,DiscoveryHelper.USE_INPUT_DN_METHOD); // Set the property for the SSLMODE disco.setProperty(DiscoveryHelper.SSLMODE,"0");
これで、情報を検出できます。
// Call the discover method disco.discover(reshdl);
検出された情報は、結果ハンドル(reshdl
)で戻されます。結果は、結果ハンドルから抽出されます。
ArrayList result = (ArrayList)reshdl.get(DiscoveryHelper.DIR_SERVERS); if (result != null) { if (result.size() == 0) return; System.out.println("The hostnames are :-"); for (int i = 0; i< result.size();i++) { String host = (String)result.get(i); System.out.println((i+1)+".'"+host+"'"); } }
DNSの検索からホスト名およびポート番号を判断するには、ドメインを取得した後、そのドメインに基づくSRVリソース・レコードを検索します。SRVリソース・レコードが複数存在する場合は、重み付けおよび優先順位に基づいてソートされます。SRVリソース・レコードには、接続に必要なホスト名およびポート番号が含まれます。この情報は、リソース・レコードから取得され、ユーザーに戻されます。
検索に必要なドメイン名の判断には、次の3つの方法があります。
ネーミング・コンテキストの識別名(DN)のマッピング
ローカル・マシンのドメイン・コンポーネントの使用
DNSでのデフォルトSRVレコードの検索
1つ目は、ネーミング・コンテキストの識別名(DN)を、次のアルゴリズムを使用してドメイン名にマップする方法です。
最初は、出力されるドメイン名は空です。識別名は、右から順に処理されます。相対識別名(RDN)は、次の条件を満たす場合に変換できます。
単一の属性型および属性値で構成される。
属性型がdc
である。
属性値がNULL以外である。
RDNを変換できる場合、属性値がドメイン名コンポーネント(ラベル)として使用されます。
最初の値が、右側の最も重要なドメイン名コンポーネントになります。変換された後続のRDN値が左側に追加されます。RDNを変換できない場合、処理は停止します。処理の停止時に出力されたドメイン名が空であった場合、DNはドメイン名に変換されません。
DNがcn=John Doe,ou=accounting,dc=example,dc=net
の場合、クライアントによって、dcコンポーネントがDNS名example.net
に変換されます。
DNをドメイン名にマップできない場合もあります。たとえば、DNがo=Oracle IDC,Bangalore
の場合、ドメイン名にはマップできません。この場合、2つ目の方法として、クライアントが実行されているローカル・マシンのドメイン・コンポーネントを使用します。たとえば、クライアント・マシンのドメイン名がmc1.example.com
の場合、検索に使用するドメイン名はexample.com
です。
3つ目は、DNSでデフォルトSRVレコードを検索する方法です。このレコードは、デプロイメント内のデフォルト・サーバーを指しています。このデフォルト・レコードのドメイン・コンポーネントは、_default
です。
ドメイン名が判断されると、DNSへの問合せの送信に使用されます。DNSに対して、Oracle Internet Directory固有の形式で指定されているSRVレコードが問い合されます。たとえば、取得されたドメイン名がexample.net
の場合、SSL LDAP以外のサーバーに対して、所有者名が_ldap._tcp._oid.example.net
のSRVリソース・レコードが問い合されます。
DNSからSRVリソース・レコードが戻されない場合もあります。このような場合、DNSでの検索は、標準形式で指定されたSRVリソース・レコードに対して実行されます。たとえば、所有者名は_ldap._tcp.example.net
となります。
問合せの結果は、SRVレコードのセットです。これらのレコードはソートされ、レコードからホスト情報が抽出されます。抽出された情報はユーザーに戻されます。
注意: 前述の方法は、DNSの問合せ検索が成功して停止するまで、連続して試行することができます。これらの方法は、この項で説明した順序で試行されます。DNSに対して、Oracle Internet Directory固有の形式のSRVレコードのみが問い合されます。前述のいずれの方法も失敗する場合、DNSに対して標準形式のSRVレコードのみの問合せを指定して、すべての方法が再度試行されます。 |
次の環境変数は、DNSサーバー検出のデフォルト動作を変更します。
ディレクトリ・サーバー情報の検出には、取得する際に使用するメカニズムや規格にかかわらず、単一のプログラミング・インタフェースが提供されます。情報は、様々なソースから検出される場合があります。それぞれのソース独自のメカニズムを使用して情報を検出できます。たとえば、LDAPホストおよびポート番号情報は、ソースとして機能するDNSから検出される場合があります。この場合は、DNSからのホスト名の検出にDSDが使用されます。
関連項目: リファレンス情報およびクラスの説明については、プロダクトCDに格納されているJavadocを参照してください。 |