LDAP ネームサービスプロバイダ
Java Naming and Directory InterfaceTM (JNDI)


コメントの送付先: jndi@java.sun.com

目次

  1. はじめに
  2. 適合性
  3. 環境プロパティ
  4. 名前
  5. 属性
  6. URL
  7. Java オブジェクト
  8. スキーマ
  9. 例外
  10. API マッピング
  11. 連合
  12. イベントの通知
  13. SASL 認証
  14. SSL および Start TLS
  15. セキュリティについて



1. はじめに

Lightweight Directory Access Protocol (LDAP) は、ディレクトリサービスにアクセスするときのインターネット標準です。 JNDI/LDAP サービスプロバイダを使用して、LDAP のプロトコルが実装されているサーバにアクセスすることができます。

このドキュメントでは、LDAP サービスプロバイダの機能について説明します。 主に、LDAP サービスプロバイダの動作を中心に説明します。詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。 例および使用方法については、JNDI チュートリアルを参照してください。

LDAP サービスプロバイダには、LDAP アクセスの基本機能が実装されます。 汎用的な LDAP コントロール、RMI オブジェクトと CORBA オブジェクトの格納および読み込みに対するサポートなどを基本プロバイダに追加する場合は、「ブースターパック」をインストールしてください。「ブースターパック」は、JNDI の Web サイトからダウンロードできます。


2. 適合性

LDAP サービスプロバイダは、次の標準に準拠しています。
 
標準 サポート 備考
LDAPv3 (RFC 2251) はい  
LDAPv3 属性 (RFC 2252) はい  
LDAPv3 識別名 (RFC 2253) はい  
LDAP 検索フィルタ (RFC 2254) はい  
LDAP URL 形式 (RFC 2255) はい  
LDAPv3 スキーマ (RFC 2256) はい  
LDAPv2 (RFC 1777) はい  
LDAP 認証 (RFC 2829) はい  
Start TLS 拡張機能 (RFC 2830) はい  
DIGEST-MD5 (RFC 2831) はい  


3. 環境プロパティ

JNDI、LDAP 固有、および SASL 固有のプロパティについての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。

3.1 JNDI プロパティ

LDAP サービスプロバイダでは、次の JNDI 環境プロパティがサポートされます。
 
プロパティ サポート 備考
java.naming.batchsize はい デフォルト値は 1
java.naming.factory.control はい  
java.naming.factory.initial はい LDAP サービスプロバイダを初期コンテキストとして使用するときは、com.sun.jndi.ldap.LdapCtxFactory を指定する
java.naming.factory.object はい  
java.naming.factory.state はい  
java.naming.language いいえ 無視される
java.naming.provider.url はい  
java.naming.referral はい  
java.naming.security.authentication はい simplenone、SASL 機構のリスト
java.naming.security.credentials はい  
java.naming.security.principal はい  
java.naming.security.protocol はい ssl

3.2 LDAP 固有のプロパティ

LDAP サービスプロバイダでは、次の LDAP 固有の環境プロパティがサポートされます。
 
プロパティ サポート 備考
java.naming.ldap.attributes.binary はい  
java.naming.ldap.control.connect はい  
java.naming.ldap.deleteRDN はい  
java.naming.ldap.derefAliases はい  
java.naming.ldap.factory.socket はい java.naming.security.protocolプロパティに ssl が設定されているときは、デフォルト値は javax.net.ssl.SSLSocketFactory。 詳細は、「SSL」を参照
java.naming.ldap.ref.separator はい  
java.naming.ldap.referral.limit はい  
java.naming.ldap.typesOnly はい  
java.naming.ldap.version はい  

3.3 SASL 固有のプロパティ

このサービスプロバイダでは、次の SASL 固有の環境プロパティがサポートされます。
 
プロパティ サポート 備考
java.naming.security.sasl.authorizationId はい  
java.naming.security.sasl.callback はい  
java.naming.security.sasl.realm はい  
javax.security.sasl.client.pkgs はい  
javax.security.sasl.qop はい  
javax.security.sasl.strength はい Java プラットフォームの Java 暗号化拡張機能 (JCE) サービスプロバイダで利用できる暗号に基づいて選択された暗号
javax.security.sasl.maxbuffer はい  
javax.security.sasl.server.authentication はい  
javax.security.sasl.policy.forward はい  
javax.security.sasl.policy.credentials はい  
javax.security.sasl.policy.noplaintext はい  
javax.security.sasl.policy.noactive はい  
javax.security.sasl.policy.nodictionary はい  
javax.security.sasl.policy.noanonymous はい  

3.4 プロバイダ固有のプロパティ

LDAP サービスプロバイダは、次のプロバイダ固有の環境プロパティを定義しています。
 
com.sun.jndi.ldap.connect.timeout
このプロパティの値は、接続タイムアウトのミリ秒数を示す整数を文字列で表現したものです。 LDAP プロバイダがこの値の期間中に接続を確立できないと、接続の試行は中止されます。 整数は 0 より大きい必要があります。 0 以下の整数を指定した場合は、TCP などのネットワークプロトコルのタイムアウト値が使用されます。

このプロパティが指定されない場合は、接続が確立されるのを待機するか、または基本となるネットワークのタイムアウトまで待機します。

次に例を示します。

env.put("com.sun.jndi.ldap.connect.timeout", "500");
0.5 秒以内に接続が確立されない場合、LDAP サービスプロバイダによる接続試行が中止されます。

注 - Java 2 SDK の v 1.4 より前のシステムでは、接続タイムアウトが SDK でサポートされないため、このプロパティは無視されます。

com.sun.jndi.ldap.netscape.schemaBugs
Netscape Directory Server 4.0 以前のリリースでは、RFC 2252 に準拠しているスキーマエントリはサポートされていません。特に、Netscape サーバでは RFC 2252 と異なり、OID (SUP および SYNTAX の OID など) は単一引用符で区切り、MUST/MAY リストは括弧で囲む必要があります。 Netscape Directory Server 4.0 のスキーマを更新するときは、この問題に対処するために、この com.sun.jndi.ldap.netscape.schemaBugs プロパティを使用する必要があります。

次の値は、このプロパティ用に定義されたものです。

        true
回避策を有効にする
false
回避策を無効にする

このプロパティが設定されない場合、デフォルト値は false になります。

次に例を示します。

env.put("com.sun.jndi.ldap.netscape.schemaBugs", "true");
この場合は、回避策が有効になります。

注 1: このプロパティは、初期コンテキストにだけ渡され、そのプロバイダで固定されます。 addToEnvironment または removeFromEnvironment メソッドには影響されません。

注 2: Netscape Directory Server 4.1 を使用している場合、このプロパティを使用してはなりません。 4.1 サーバでは、括弧の付かない MUST/MAY 句を含むオブジェクトクラス定義を構文解析する際に問題が発生します。 単一の MUST/MAY 項目を含むオブジェクトクラス定義を作成または変更する場合、MUST/MAY リストに余分の値 (objectClass など) を追加することにより、このバグを回避してください。

com.sun.jndi.ldap.trace.ber
このプロパティの値は、java.io.OutputStream オブジェクトです。このオブジェクトに対して、LDAP ASN.1 BER の送受信パケットの 16 進ダンプが書き込まれます。

このプロパティのデフォルトは定義されていません。

次に例を示します。

env.put("com.sun.jndi.ldap.trace.ber", System.out);
この場合、LDAP プロトコルトレースは標準の出力ストリームに書き込まれます。

注 - このプロパティは、初期コンテキストにだけ渡され、そのプロバイダで固定されます。 addToEnvironment または removeFromEnvironment メソッドには影響されません。


4. 名前

LDAP サービスプロバイダの名前についての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。 次の形式の LDAP 識別名がサポートされています。
 
識別名の形式 備考
String 複合名とみなされる。 複合名の最初のコンポーネントは、識別名として処理される。 残りのコンポーネントは連合される
名前 CompositeName のインスタンスの場合は、複合名とみなされる。つまり、最初の複合名のコンポーネントは、識別名として処理され、残りのコンポーネントは連合される。 CompositeName のインスタンスでない場合は、解析済みの LDAP 名とみなされる。この場合、Name の各コンポーネントは、RFC 2253 に定義されている LDAP 名のコンポーネントとなる
LDAP URL 文字列 LDAP URL 文字列が初期コンテキストに渡されると、RFC 2255 に基づいて解釈され、その識別名コンポーネントは RFC 2253 に基づいて解釈される

getNameParser() 呼び出しから返された名前パーサによってパーサが返されます。このパーサは、文字列名を受け取ると RFC 2253 に基づいて文字列名を解析し、コンポーネントに渡します。


5. 属性

LDAP サービスプロバイダの属性について詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。 LDAP サービスプロバイダでは、属性値を指定するときに次の形式が使用されます。
 
属性値の形式 サポート 備考
String はい  
byte[] はい  

一部の LDAP サーバでは、属性値に対して言語の優先順位を指定するときに、属性の部分型、属性名の類語、および言語コードを使用することができます。 この場合、LDAP サーバから返された属性名は、要求した属性名と異なることがあります。

LDAP では、属性名の大文字小文字が区別されます。 このため、パラメータとして JNDI 操作に渡す属性のまとまりを作成するときは、大文字小文字が区別される属性クラスを使用することをお勧めします。 次に例を示します。

        Attributes attrs = new BasicAttributes(true); // ignoreCase=true

属性値を使用するときは、String および byte[] のどちらの場合も、その属性値の構文と形式の情報が必要です。 属性値の構文と形式は、これらの情報が定義されているスキーマドキュメントで確認できます。

属性を JNDI 呼び出しに引数として指定するときは、その属性は LDAP ディレクトリに適用されているすべてのスキーマに合致していなければなりません。特に、新しい LDAP を作成するときは (Context.bind Context.rebind、または DirContext.createSubcontext を使用するときなど)、通常は objectClass 属性が必要です。


6. URL

LDAP サービスプロバイダの URL についての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。 URL は、次の方法で使用できます。
 
URL の使用法 サポート 備考
LDAP URL を使用して LDAP サービスプロバイダを設定する はい  
URL を InitialDirContext メソッドに名前として渡す はい LDAP URL の属性、スコープ、フィルタ、および拡張コンポーネントは、search メソッドでは無視される
LDAP 紹介で URL を使用する はい LDAP URL のスコープコンポーネントはサポートされる。 属性、フィルタ、および拡張コンポーネントは無視される
URL が、listlistBindings、および search 列挙の名前として返される はい  
連合された名前空間に URL をリンクする はい  



7. Java オブジェクト

LDAP サービスプロバイダでは、次の種類のオブジェクトの格納および読み込みを行うことができます。詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。
 
格納および読み込みが可能なオブジェクト サポート 備考
Reference オブジェクト はい  
Referenceable オブジェクト はい  
Serializable オブジェクト はい  
DirContext オブジェクト はい  

例については、JNDI チュートリアルを参照してください。


8. スキーマ

LDAP サービスプロバイダのスキーマバインディングについての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。
 
スキーマツリー サポート 備考
AttributeDefinition はい  
ClassDefinition はい  
SyntaxDefinition はい  
MatchingRule はい  
ExtensionDefinition いいえ  
ControlDefinition いいえ  
SASLMechanism いいえ  


9. 例外

LDAP サービスプロバイダの、LDAP エラーコードの JNDI 例外へのマッピングについての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。
 


10. API マッピング

LDAP サービスプロバイダでは、次の JNDI API メソッドが LDAP にマッピングされます。詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。
 
Context メソッドのマッピング サポート 備考
addToEnvironment はい  
bind はい  
close はい  
composeName はい  
destroySubcontext はい  
getEnvironment はい  
getNameInNamespace はい  
getNameParser はい  
list はい  
listBindings はい  
lookup はい LinkRef は対象外
lookupLink はい  
rebind はい  
removeFromEnvironment はい  
rename はい  
unbind はい  
DirContext メソッドのマッピング サポート 備考
bind はい  
createSubcontext はい  
destroySubcontext はい  
getAttributes はい  
getSchema はい  
getSchemaClassDefinition はい  
modifyAttributes はい  
rebind はい  
search はい  
LdapContext メソッドのマッピング サポート 備考
extendedOperation はい  
getRequestControls はい  
getResponseControls はい  
newInstance はい  
reconnect はい  
setRequestControls はい  
EventDirContext メソッドのマッピング サポート 備考
addNamingListener はい  
removeNamingListener はい  
targetMustExist はい  


11. 連合

LDAP サービスプロバイダの連合についての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。 次の連合方法がサポートされます。
 
連合方法 サポート 備考
連結 はい 下位のネームシステムが別の LDAP システムの場合は除く
暗黙的な次のネームシステムポインタ はい  
 

LDAP サービスプロバイダでは、複合名は「強く区分されている」とみなされます。 つまり、複合名の最初のコンポーネントが識別名として処理され、残りのコンポーネントは次のネームシステムの名前として処理されます。 たとえば、次の例では、次のネームシステムのルートのリストを出力しています。このネームシステムは、LDAP コンテキストを超えて連合されています。次に、マルチコンポーネントの複合名を使用して名前が参照されます。

// List the root of the nns,
// Note use of the trailing slash to indicate traversal into the nns
NamingEnumeration enum = ctx.list("cn=objects,ou=Sales/");

// A composite name lookup
Object obj = ctx.lookup("cn=objects,ou=Sales/some/x/y/z");


12. イベントの通知

LDAP サービスプロバイダのイベントの通知についての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。 次のイベントがサポートされます。
 
イベント サポート 備考
名前空間の変更の通知 はい 持続的検索コントロールを使用 (*)
オブジェクトの変更の通知 はい 持続的検索コントロールを使用 (*)
任意の通知 はい  

* 持続的検索コントロールは、「IETF インターネットドラフト draft-ietf-ldapext-psearch-03.txt で定義されています。


13. SASL 認証

LDAP サービスプロバイダの SSL 認証についての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。

LDAP サービスプロバイダでは、次の SASL 機構がサポートされます。

このプロバイダでは、上記の機構に加えて、Java SASL API (JSR 28 Public Review Draft) に定義されたフレームワーク経由で利用できる SASL 機構がサポートされます。ただし例外として、パッケージの名前は javax.security.sasl でなく com.sun.security.sasl.preview になります。


14. SSL および Start TLS

LDAP サービスプロバイダの SSL についての詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。 java.naming.ldap.factory.socket プロパティがほかのソケットファクトリのクラス名に設定されていない場合は、デフォルトの javax.net.ssl.SSLSocketFactory ソケットファクトリが使用されます。

LDAP プロバイダでは、StartTlsResponse 抽象クラスの固定実装により、「Start TLS」 拡張機能 (「1.3.6.1.4.1.1466.20037」) がサポートされます。


15. セキュリティについて

セキュリティマネージャがインストールされている場合は、JNDI を使用するアプリケーションおよび LDAP サービスプロバイダに対して、次のアクセス権を割り当てる必要があります。

permission java.net.SocketPermission "host[:port]", "connect";
コンテキストメソッドに渡された java.naming.factory.initial プロパティおよび URL 文字列名に指定されている各ホストまたはポートに対して、割り当てられます。
permission java.net.SocketPermission "host[:port]", "connect,accept";
Serializable オブジェクトを使用して格納された References および javaCodebase 属性の URL 文字列に指定されている各ホストまたはポートに対して、割り当てられます。
SASL 認証を使用中に SASL クライアントファクトリをプログラムによって設定する場合は、アプリケーションに次のアクセス権を割り当ててください。
permission java.lang.RuntimePermission "setFactory"
さらに、「GSSAPI」 SASL 機構を使用する場合は、次のアクセス権も必要になります。
permission javax.security.auth.AuthPermission "createLoginContext.appClassName";
permission javax.security.auth.AuthPermission "doAsPrivileged";
ログインして doAsPrivileged メソッドを呼び出そうとしているアプリケーションクラス用のアクセス権です。
permission java.net.SocketPermission "host[:port]", "connect";
Kerberos Key Distribution Center (KDC) のホスト/ポート用のアクセス権です。
permission javax.security.auth.kerberos.ServicePermission "krbtgt/realm@realm", "initiate";
permission javax.security.auth.kerberos.ServicePermission "ldap/fully-qualified-hostname@realm", "initiate";
LDAP サービスと KDC の範囲とホスト用のアクセス権です。


Copyright © 1999-2001 Sun Microsystems, Inc., All Rights Reserved.