多くの答えがあるかもしれません。考えられる答えの1つは、プリンシパルを使用してベースDNを構築し、スコープbase
、フィルターを使用してディレクトリサーバーにクエリを実行し、属性'(&)'
を要求することです。isMemberOf
たとえば、最新のldapsearch
コマンドラインツールと次のプリンシパルを使用する私のテストシステムではuser.0
:
ldapsearch --hostname localhost --port 1389 \
--bindDN 'cn=directory manager' --baseDn \
'uid=user.0,ou=people,dc=example,dc=com' \
--searchScope base '(&)' isMemberOf
Password for user 'cn=directory manager':
dn: uid=user.0,ou=people,dc=example,dc=com
isMemberOf: cn=shadow entries,ou=groups,dc=example,dc=com
isMemberOf: cn=persons,ou=groups,dc=example,dc=com
namingContext
この方法では、、この場合dc=example,dc=com
は、ユーザーがツリーのどこにいるかについての知識が必要です。ユーザーの場所がわからない場合の別の同様の方法は、最初にユーザーを検索し、次に検索結果から識別された名前を使用して上記のクエリを実行することです。が不明な場合は、ルートDSEからnamingContext
を検出できる可能性があります。ルートDSEからnamingContext
を回復するには、この記事を参照してください。namingContext
LDAP標準を正しくサポートしておらず、フィルターを拒否する、広く使用されているディレクトリサーバーがいくつかあり'(&)'
ます。ディレクトリサーバーがこれらのいずれかである場合は、単にプレゼンスフィルターに置き換えてください'(objectClass=*)'
。Java用のLDAPSDKはたくさんありますが、私が好むのはUnboundIDのものです。