1

Webサービスを読み取り、ユーザーデータを取得し、そのデータをActiveDirectoryにプッシュして、ユーザーの役職、住所、電話番号などを更新するプログラムを作成しました.

問題は、Unboundid Connection クラスを使用して検索を実行すると、要求された属性が返されないことです。以下は検索コードです。

SearchResult result = connection.search( properties.getProperty("ldap.search.baseDN"), 
                        SearchScope.SUB, "(cn=" + userId + ")", 
                        "personalTitle", "department", "company", "manager", "telephoneNumber", 
                        "streetAddress", "I", "st", "postalCode", "c", "pager", "mobile", 
                        "fax", "cn");

上記のコードは目的のユーザーを特定し、cn 属性は期待どおりに返されますが、他の属性はすべて返されません。同じ接続資格情報を使用して JXplorer を使用して AD に接続すると、必要なすべての属性が存在することを確認できますが、単に返されません。

ここに画像の説明を入力

フィールドを明示的にリストするのではなく、SearchRequest.ALL_OPERATIONAL_ATTRIBUTES、SearchRequest.ALL_USER_ATTRIBUTES、および SearchRequest.REQUEST_ATTRS_DEFAULT を代入しようとしましたが、成功しませんでした。

また、「connection.getSchema()」から返された「Schema」オブジェクトを調べたところ、personalTitle が存在する必要があることがわかります。

connection.getSchema().getAttributeType("personalTitle")

上記のコードは次を返します。

1.2.840.113556.1.2.615 NAME 'personalTitle' SYNTAX '1.3.6.1.4.1.1466.115.121.1.15' SINGLE-VALUE

多分これはユーザー権限の問題ですか?誰もこれを経験し、それを解決する方法を知っていますか?

ありがとう、マイク

4

1 に答える 1

1

LDAP 検索結果のエントリには、実際に値を持つ属性のみが含まれるため、UnboundID LDAP SDK から見られる動作は適切で正しいものです。特定の属性を明示的に要求した場合でも、その属性は、1 つ以上の値を持つ場合にのみエントリに含まれます。

JXplorer はスキーマを読み取って、そのオブジェクト クラスに基づいてエントリに含まれる可能性のある属性を判断し、エディターでそれらの属性の値を設定できるようにそれらを表示しているため、混乱していると思います。ただし、サーバーから返されたエントリに、これらの属性に関する情報が実際に含まれているわけではありません。

これを確認するには、LDAP SDK で提供される ldap-debugger ツールを使用して、発生する実際の LDAP 通信を確認します。次のようなコマンドを実行するだけです:

 tools/ldap-debugger --hostname {directory-server-address} \
      --port {directory-server-port} --listenPort {listen-port}

これにより、通過するすべての要求と応答をデコードする非常に単純な LDAP プロキシ サーバーが作成されます。これを使用するには、JXplorer を指定されたリッスン ポートに向けるだけです。JXplorer がエントリを取得すると、サーバーから返されたエントリには、実際に値を持つ属性のみが含まれていることがわかります。

特定のエントリに含めることができるすべての属性を把握したい場合は、LDAPConnection.getSchema メソッドを使用してサーバー スキーマを取得し、次にターゲット エントリの各オブジェクト クラスの Schema.getObjectClass を取得します。最後に、ObjectClassDefinition.getRequiredAttributes メソッドと ObjectClassDefinition.getOptionalAttributes メソッドを使用して、そのオブジェクト クラスのエントリで使用する必要がある属性タイプと使用できる属性タイプを確認します。

于 2014-02-14T07:36:54.387 に答える