-1

次のコードを使用すると、ユーザーtestuをパスワードtestpでローカル LDAP サーバーにバインド/認証できます。私の DIT では、このユーザーはグループにも属していますAdministrators。彼が属しているグループの名前を取得するにはどうすればよいですか、またはその逆に、そのユーザーがそのグループに属しているかどうかを確認するにはどうすればよいですか?

public static void main(String[] args) 
{
    Properties properties = new Properties();
    properties.put(Context.INITIAL_CONTEXT_FACTORY, "com.sun.jndi.ldap.LdapCtxFactory" );
    properties.put(Context.PROVIDER_URL, "ldap://localhost:10389");

    // set properties for authentication
    properties.put(Context.SECURITY_AUTHENTICATION, "simple");
    properties.put(Context.SECURITY_PRINCIPAL, "cn=testu,ou=users,ou=system");
    properties.put(Context.SECURITY_CREDENTIALS, "testp");

    try {
        InitialLdapContext ctx = new InitialLdapContext(properties, null);          
    } catch (NamingException e) {
        e.printStackTrace();
    }
}

LDAP ブラウザのツリー構造に、ユーザーがいますtestu

cn=testu,ou=users,ou=system

Administratorsグループが下にある間

cn=Administrators,ou=groups,ou=system

そのグループのユーザーを取得したとは思いませんが、取得したと仮定すると、どのように検索しますか? 私は基本的に、認証されたユーザーに関連する LDAP を介して検索クエリを実行する方法を尋ねています。

次のグループがあるとします。

cn=operations,ou=groups,ou=system
objectClass:groupOfNames (structural)
objectClass:top (abstract)
cn:operations
member:cn=soto,ou=users,ou=system
member:cn=testu,ou=users,ou=system

そして、このユーザー:

cn=testu,ou=users,ou=system
objectClass:organizationalPerson (structural)
objectClass:person (structural)
objectClass:top (abstract)
cn:testu
sn:some name
userPassword:SHA hashed password    [testp]

このユーザーからグループを取得するにはどうすればよいですか?

4

2 に答える 2

1

バインドを実行すると、ユーザーの DN がわかるので、次のような検索要求を実行できます。

ベース検索 DN: ou=system

(member=cn=testu,ou=users,ou=system)

これは、権限があれば、ユーザーが直接メンバーであるすべてのグループを返します。ネストされたグループ メンバーシップは含まれません。

于 2013-02-15T12:20:24.537 に答える
0

私の知る限り、LDAP は現在ログインしているユーザーに関するグループ情報をコンテキストに添付しません。彼/彼女の力については、どのアクションが機能し、何が機能しないかによって間接的にしか知ることができません-確かに、そのようにするつもりはありません.

ユーザーが特定のグループに属しているかどうかを確認する場合、または一般に、ログインしたばかりの (またはログインしていない) ユーザーの限られた視点から世界を表示してはならないクエリを送信する場合は、別のユーザーを作成しますLDAP (そのアプリケーションの「アプリケーション接続」ユーザー) に接続し、そのユーザーに接続してクエリを送信します。(これは、すべてを実行できる DB 管理者アカウントを持っているほとんどの SQL Server に似ていますが、アプリケーションがある場合は、管理者アカウントで DB に接続せず、そのアプリケーション用の特別なユーザーを作成します。必要なデータベース/テーブルの読み取りと書き込み)。

それはおそらく、あなたがすでに自分で考えた解決策なので、この投稿の実際の「答え」の部分は、私の知る限り、他に方法がないということです.

于 2013-02-14T20:18:27.213 に答える