コメントの送付先: jndi@java.sun.com
目次
このドキュメントでは、LDAP サービスプロバイダの機能について説明します。 主に、LDAP サービスプロバイダの動作を中心に説明します。詳細は、「LDAP サービスプロバイダに対する JNDI 実装側のガイドライン」を参照してください。 例および使用方法については、JNDI チュートリアルを参照してください。
LDAP サービスプロバイダには、LDAP アクセスの基本機能が実装されます。 汎用的な LDAP コントロール、RMI オブジェクトと CORBA オブジェクトの格納および読み込みに対するサポートなどを基本プロバイダに追加する場合は、「ブースターパック」をインストールしてください。「ブースターパック」は、JNDI の Web サイトからダウンロードできます。
標準 | サポート | 備考 |
---|---|---|
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) | はい |
プロパティ | サポート | 備考 |
---|---|---|
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 | はい | simple、none、SASL 機構のリスト |
java.naming.security.credentials | はい | |
java.naming.security.principal | はい | |
java.naming.security.protocol | はい | ssl |
プロパティ | サポート | 備考 |
---|---|---|
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 | はい |
このプロパティの値は、接続タイムアウトのミリ秒数を示す整数を文字列で表現したものです。 LDAP プロバイダがこの値の期間中に接続を確立できないと、接続の試行は中止されます。 整数は 0 より大きい必要があります。 0 以下の整数を指定した場合は、TCP などのネットワークプロトコルのタイムアウト値が使用されます。このプロパティが指定されない場合は、接続が確立されるのを待機するか、または基本となるネットワークのタイムアウトまで待機します。
次に例を示します。
env.put("com.sun.jndi.ldap.connect.timeout", "500");0.5 秒以内に接続が確立されない場合、LDAP サービスプロバイダによる接続試行が中止されます。
注 - Java 2 SDK の v 1.4 より前のシステムでは、接続タイムアウトが SDK でサポートされないため、このプロパティは無視されます。
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 など) を追加することにより、このバグを回避してください。
このプロパティの値は、java.io.OutputStream オブジェクトです。このオブジェクトに対して、LDAP ASN.1 BER の送受信パケットの 16 進ダンプが書き込まれます。このプロパティのデフォルトは定義されていません。
次に例を示します。
env.put("com.sun.jndi.ldap.trace.ber", System.out);この場合、LDAP プロトコルトレースは標準の出力ストリームに書き込まれます。注 - このプロパティは、初期コンテキストにだけ渡され、そのプロバイダで固定されます。 addToEnvironment または removeFromEnvironment メソッドには影響されません。
識別名の形式 | 備考 |
---|---|
String | 複合名とみなされる。 複合名の最初のコンポーネントは、識別名として処理される。 残りのコンポーネントは連合される |
名前 | CompositeName のインスタンスの場合は、複合名とみなされる。つまり、最初の複合名のコンポーネントは、識別名として処理され、残りのコンポーネントは連合される。 CompositeName のインスタンスでない場合は、解析済みの LDAP 名とみなされる。この場合、Name の各コンポーネントは、RFC 2253 に定義されている LDAP 名のコンポーネントとなる |
LDAP URL 文字列 | LDAP URL 文字列が初期コンテキストに渡されると、RFC 2255 に基づいて解釈され、その識別名コンポーネントは RFC 2253 に基づいて解釈される |
getNameParser() 呼び出しから返された名前パーサによってパーサが返されます。このパーサは、文字列名を受け取ると RFC 2253 に基づいて文字列名を解析し、コンポーネントに渡します。
属性値の形式 | サポート | 備考 |
---|---|---|
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 属性が必要です。
URL の使用法 | サポート | 備考 |
---|---|---|
LDAP URL を使用して LDAP サービスプロバイダを設定する | はい | |
URL を InitialDirContext メソッドに名前として渡す | はい | LDAP URL の属性、スコープ、フィルタ、および拡張コンポーネントは、search メソッドでは無視される |
LDAP 紹介で URL を使用する | はい | LDAP URL のスコープコンポーネントはサポートされる。 属性、フィルタ、および拡張コンポーネントは無視される |
URL が、list、listBindings、および search 列挙の名前として返される | はい | |
連合された名前空間に URL をリンクする | はい |
格納および読み込みが可能なオブジェクト | サポート | 備考 |
---|---|---|
Reference オブジェクト | はい | |
Referenceable オブジェクト | はい | |
Serializable オブジェクト | はい | |
DirContext オブジェクト | はい |
例については、JNDI チュートリアルを参照してください。
スキーマツリー | サポート | 備考 |
---|---|---|
AttributeDefinition | はい | |
ClassDefinition | はい | |
SyntaxDefinition | はい | |
MatchingRule | はい | |
ExtensionDefinition | いいえ | |
ControlDefinition | いいえ | |
SASLMechanism | いいえ |
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 | はい |
連合方法 | サポート | 備考 |
---|---|---|
連結 | はい | 下位のネームシステムが別の 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");
イベント | サポート | 備考 |
---|---|---|
名前空間の変更の通知 | はい | 持続的検索コントロールを使用 (*) |
オブジェクトの変更の通知 | はい | 持続的検索コントロールを使用 (*) |
任意の通知 | はい |
* 持続的検索コントロールは、「IETF インターネットドラフト draft-ietf-ldapext-psearch-03.txt で定義されています。
LDAP サービスプロバイダでは、次の SASL 機構がサポートされます。
LDAP プロバイダでは、StartTlsResponse 抽象クラスの固定実装により、「Start TLS」 拡張機能 (「1.3.6.1.4.1.1466.20037」) がサポートされます。
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 の範囲とホスト用のアクセス権です。