ヘッダーをスキップ
Oracle® Fusion Middleware Oracle Identity Managementアプリケーション開発者ガイド
11gリリース1(11.1.1)
B56242-03
  目次へ
目次
索引へ
索引

前へ
前へ
 
次へ
次へ
 

4 標準的なAPIに対するOracleの拡張機能を使用したアプリケーションの開発

この章では、JavaおよびPL/SQL LDAP APIに対するOracleの拡張機能について説明します。第5章ではJavaの拡張機能について説明します。第6章ではPL/SQLの拡張機能について説明します。C APIに対する拡張機能は、Oracleではサポートされません。

この章では、次の項目について説明します。

4.1 標準的なAPIに対するOracleの拡張機能の使用

オラクル社が既存のAPIに追加したAPIは、次の機能を実現します。

この後の各項では、これらの機能を1つずつ詳細に解説します。一般的なタスク(接続の確立およびクローズ、APIの拡張機能で検索できないディレクトリ・エントリの検索など)については、基礎となるAPIをアプリケーションで使用する必要があります。

図4-1に、APIの拡張機能を使用した場合のプログラム・フローを示します。

図4-1 APIの拡張機能のプログラム・フロー

図4-1の説明が続きます
「図4-1 APIの拡張機能のプログラム・フロー」の説明

図4-1に示すように、アプリケーションはまずOracle Internet Directoryへの接続を確立します。その後、標準的なAPIファンクションとAPIの拡張機能を区別なく使用できます。

4.2 ディレクトリへのアプリケーション・アイデンティティの作成

アプリケーションがLDAP APIとその拡張機能を使用するためには、LDAP接続を確立する必要があります。接続が確立されたら、操作を実行する権限を得る必要があります。しかし、アプリケーションのアイデンティティがディレクトリにない場合は、どちらのタスクも実行できません。

4.2.1 アプリケーションのアイデンティティの作成

ディレクトリにアプリケーションのアイデンティティを作成するのは比較的簡単です。このようなエントリに必要なのは、orclApplicationEntitytopの2つのオブジェクト・クラスのみです。Oracle Directory ManagerまたはLDIFファイルを使用してエントリを作成できます。LDIF表記法では、エントリは次のようになります。

dn: orclapplicationcommonname=application_name
changetype: add
objectclass:top
objectclass: orclApplicationEntity
userpassword: password

userpasswordに指定する値は、アプリケーションがディレクトリへのバインドに使用する値です。

4.2.2 アプリケーションのアイデンティティへの権限の割当て

アプリケーションに割り当てることのできる権限の詳細は、『Oracle Fusion Middleware Oracle Internet Directory管理者ガイド』のOracleテクノロジ・デプロイメントのための権限の委任に関する章を参照してください。正しい権限セットが特定できたら、アプリケーション・エンティティの識別名を適切なディレクトリ・グループに追加します。前述のドキュメントでは、Oracle Directory Services Managerまたはldapmodifyコマンドを使用してこのタスクを実行する方法が説明されています。

4.3 ユーザーの管理

この項では、LDAP APIのユーザー管理機能について説明します。

ディレクトリ対応アプリケーションは、次の操作を実行する必要があります。

4.4 グループの管理

Oracle Internet Directoryでは、グループは識別名の集合としてモデル化されます。ディレクトリ対応のアプリケーションは、グループのプロパティを取得し、特定のユーザーがそのグループのメンバーであることを検証するために、Oracle Internet Directoryにアクセスする必要があります。

通常、グループは次のいずれかを使用して識別されます。

4.5 レルムの管理

アイデンティティ管理レルムは、多数のOracle製品によって提供されるサービスをサブスクライブするエンティティまたは組織です。ディレクトリ対応のアプリケーションは、レルム・プロパティ(ユーザー検索ベースやパスワード・ポリシーなど)を取得するために、Oracle Internet Directoryにアクセスする必要があります。

通常、レルムは次のいずれかを使用して識別されます。

4.6 ディレクトリ・サーバーの検出

ディレクトリ・サーバー検出(DSD)を使用すると、ディレクトリ・クライアントによってOracleディレクトリ・サーバーを自動検出できます。これにより、デプロイメント内で、ディレクトリのホスト名およびポート番号情報を中央のDNSサーバーで管理できます。すべてのディレクトリ・クライアントが実行時にDNS問合せを行い、ディレクトリ・サーバーに接続します。ディレクトリ・サーバーの位置情報は、DNSサービス位置レコード(SRV)を使用して格納されます。

SRVには次のものが含まれます。

また、DSDによって、クライアントがldap.oraファイル自体からディレクトリのホスト名情報を検出できます。

この項では、次の項目について説明します。


関連項目:

  • 「Discovering LDAP Services with DNS」Michael P.Armijo著(次のURLを参照)

    http://www.ietf.org.
    
  • 「A DNS RR for specifying the location of services (DNS SRV)」、Internet RFC 2782(同じURLを参照)


4.6.1 Oracle Internet Directoryの検出インタフェースの利点

通常、LDAPホスト名およびポート情報は、$ORACLE_HOME/network/adminのクライアント上に格納されているldap.oraという名前のファイルで静的に提供されます。多数のクライアントを持つ大規模なデプロイメントの場合、この情報の管理は非常に煩雑になります。たとえば、ディレクトリ・サーバーのホスト名またはポート番号が変更されるたびに、各クライアントのldap.oraファイルを変更する必要があります。

ディレクトリ・サーバー検出を使用すると、ldap.oraファイルのホスト名およびポート番号を管理する必要がなくなります。ホスト名情報は中央のDNSサーバーに格納されているため、更新するのは1回のみです。すべてのクライアントで、接続時にDNSから新しいホスト名情報を動的に検出できます。

DSDでは、取得する際に使用するメカニズムや規格にかかわらず、ディレクトリ・サーバー情報の取得に単一のインタフェースが提供されます。現在、Oracleディレクトリ・サーバーの情報は、DNSまたはldap.oraのいずれかから単一のインタフェースを使用して取得できます。

4.6.2 検出インタフェースの使用モデル

ホスト名情報を検出するには、まず検出ハンドルを作成します。検出ハンドルは、ホスト名情報の検出元を指定します。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+"'");
   }
}

4.6.3 DNSからのサーバー名およびポート番号の判断

DNSの検索からホスト名およびポート番号を判断するには、ドメインを取得した後、そのドメインに基づくSRVリソース・レコードを検索します。SRVリソース・レコードが複数存在する場合は、重み付けおよび優先順位に基づいてソートされます。SRVリソース・レコードには、接続に必要なホスト名およびポート番号が含まれます。この情報は、リソース・レコードから取得され、ユーザーに戻されます。

検索に必要なドメイン名の判断には、次の3つの方法があります。

  • ネーミング・コンテキストの識別名(DN)のマッピング

  • ローカル・マシンのドメイン・コンポーネントの使用

  • DNSでのデフォルトSRVレコードの検索

4.6.3.1 ネーミング・コンテキストの識別名のマッピング

1つ目は、ネーミング・コンテキストの識別名(DN)を、次のアルゴリズムを使用してドメイン名にマップする方法です。

最初は、出力されるドメイン名は空です。識別名は、右から順に処理されます。相対識別名(RDN)は、次の条件を満たす場合に変換できます。

  • 単一の属性型および属性値で構成される。

  • 属性型がdcである。

  • 属性値がNULL以外である。

RDNを変換できる場合、属性値がドメイン名コンポーネント(ラベル)として使用されます。

最初の値が、右側の最も重要なドメイン名コンポーネントになります。変換された後続のRDN値が左側に追加されます。RDNを変換できない場合、処理は停止します。処理の停止時に出力されたドメイン名が空であった場合、DNはドメイン名に変換されません。

DNがcn=John Doe,ou=accounting,dc=example,dc=netの場合、クライアントによって、dcコンポーネントがDNS名example.netに変換されます。

4.6.3.2 ローカル・マシンのドメイン・コンポーネントによる検索

DNをドメイン名にマップできない場合もあります。たとえば、DNがo=Oracle IDC,Bangaloreの場合、ドメイン名にはマップできません。この場合、2つ目の方法として、クライアントが実行されているローカル・マシンのドメイン・コンポーネントを使用します。たとえば、クライアント・マシンのドメイン名がmc1.example.comの場合、検索に使用するドメイン名はexample.comです。

4.6.3.3 DNSでのデフォルトSRVレコードの検索

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レコードのみの問合せを指定して、すべての方法が再度試行されます。

4.6.4 DNSサーバー検出の環境変数

次の環境変数は、DNSサーバー検出のデフォルト動作を変更します。

表4-1 DNS検出の環境変数

環境変数 説明
ORA_LDAP_DNS

SRVレコードを含むDNSサーバーのIPアドレス。この変数を定義しない場合、ホスト・マシンからDNSサーバー・アドレスが取得されます。

ORA_LDAP_DNSPORT

DNSサーバーが問合せをリスニングするポート番号。この変数を定義しない場合、DNSサーバーが標準のポート番号(53)でリスニングしていると判断されます。

ORA_LDAP_DOMAIN

ホスト・マシンのドメイン。この変数を定義しない場合、ホスト・マシン自身からドメインが取得されます。


4.6.5 DNSサーバー検出のプログラミング・インタフェース

ディレクトリ・サーバー情報の検出には、取得する際に使用するメカニズムや規格にかかわらず、単一のプログラミング・インタフェースが提供されます。情報は、様々なソースから検出される場合があります。それぞれのソース独自のメカニズムを使用して情報を検出できます。たとえば、LDAPホストおよびポート番号情報は、ソースとして機能するDNSから検出される場合があります。この場合は、DNSからのホスト名の検出にDSDが使用されます。


関連項目:

リファレンス情報およびクラスの説明については、プロダクトCDに格納されているJavadocを参照してください。