使用 Novell.Directory.Ldap.NETStandard 在 LDAP 中获取用户组

Getting user group in LDAP using Novell.Directory.Ldap.NETStandard

我有使用 Novell.Directory.Ldap.NETStandard 和 F# 获取用户详细信息的简单服务(如果需要,我可以提供 c# 的脚本,但这部分非常相似),它看起来像这样:

use connection = new LdapConnection();
connection.Connect(credentials.host, LdapConnection.DefaultPort);
connection.Bind($"{credentials.domain}\{credentials.username}", credentials.password);
match connection.Connected with
| true ->   
    let schema = connection.FetchSchema((connection.GetSchemaDn()));
    let filter = $"(SAMAccountName={credentials.username})"
    let searcher = connection.Search(String.Empty, LdapConnection.ScopeBase, filter, null, false);
    return (searcher |> Some, String.Empty)

| false -> 
    raise (Exception()) 
    return (None, $"Cannot connect to domain {credentials.domain} with user {credentials.username}")

现在我找不到有关该用户分配到的组的信息,通常当我使用 Directory.Service 我只是添加:

directorySearcher.Filter <- sprintf "(SAMAccountName=%s)"credentials.username

到目录搜索器,我可以过滤掉这些信息(因为 Directory.Service 是 windows 限制我不能在这个项目中使用它),但我找不到任何信息如何使用它在 Novell.Directory.Ldap.

调用 Search() 时,您必须提供所需的属性(即 memberOf 以便读取用户组)作为字符串数组而不是 null :

let attrs = [| "SAMAccountName"; "memberOf"; |];
let searcher = connection.Search(searchbase, scope, filter, attrs, false);

也可以通过"*"获取所有非操作属性