c# - 是否可以使用 Novell 软件包找到 LDAP 用户所属的组?(C#)
问题描述
我看到了几个问题,这些问题表明与用户和组有关,但我不知道他们的用例是什么。
我要做的就是找到用户在成功通过身份验证后链接到的组。
使用以下内容:
public bool LogInViaLDAP(LoginDTO userForLoginDto)
{
var user = userForLoginDto.Username;
string userDn = $"cn={user},ou=users,ou=system";
using (var connection = new LdapConnection { SecureSocketLayer = _isSecureSocketLayer })
{
connection.ConnectionTimeout = 36000;
connection.Connect(_domain, _port);
connection.Bind(userDn, userForLoginDto.Password);
string[] requiredAttributes = { "cn", "sn", "ou" };
string searchFilter = "objectClass=inetOrgPerson";
//this is where I was attempting to find the user's group association.
var groups = SearchForGroup(connection, userDn, searchFilter, requiredAttributes, false);
if (connection.Bound)
return true;
}
return false;
}
HashSet<string> SearchForGroup(LdapConnection connection, string user, string searchFilter, string[] requiredAttributes, bool typesOnly)
{
var result = connection.Search(user, LdapConnection.ScopeSub, searchFilter, requiredAttributes, typesOnly);
LdapEntry nextEntry = null;
while (result.HasMore())
{
nextEntry = result.Next();
}
//This only seems th return the
//sn - surname and cn - common name.
var data = nextEntry.GetAttributeSet();
return new HashSet<string>();
}
解决方案
我认为 Novell 包是基于 LDAP 使用的实际查询语言。
因此,我在 Apache Directory Studio 中选择了ou=groups节点,并尝试使用以下命令从那里搜索我的用户:
uniqueMember=cn=用户名,ou=用户,ou=系统
这返回了用户链接到的组,所以我继续。
string[] requiredAttributes = { "cn" };
var groups = SearchForGroup(connection, "ou=groups,ou=system", "uniqueMember=cn=username,ou=users,ou=system", requiredAttributes, false);
上面的片段演示了如何在我的 c# 代码中传递参数以复制我在 Directory Studio 中所做的事情
HashSet<string> SearchForGroup(LdapConnection connection, string entryPoint, string searchFilter, string[] requiredAttributes, bool typesOnly)
{
var result = connection.Search(entryPoint, LdapConnection.ScopeSub, searchFilter, requiredAttributes, typesOnly);
LdapEntry nextEntry = null;
var groups = new HashSet<string>();
foreach (var group in result)
{
var attribute = group.GetAttribute("cn");
groups.Add(attribute.StringValue);
}
return groups;
}
推荐阅读
- java - getChildCount 上始终返回 null (NPE) - 检查所有内容
- c# - MappingException:在具有流畅映射的 N 层应用程序中没有持久性
- c# - 即使值为 null,StringValues 计数也显示 1
- javascript - 在 chrome 扩展嵌入 iframe 中使用 YouTube 数据 api
- android - 使用 xml 内容实现 android 可扩展通知?
- mysql - 无法使用 SQLJocky 服务(未定义的类 'SHA1' 和其他错误)
- python - python中大矩阵的稀疏表示
- java - Java Spring Batch如何从postgres读取然后逐步写入数据
- android - Firebase 个人内容索引有什么用?
- c# - 如何在启动画面中应用 Lottie 动画?