gpt4 book ai didi

c# - 递归查询 LDAP 组成员资格

转载 作者:太空狗 更新时间:2023-10-29 23:02:16 27 4
gpt4 key购买 nike

我正在编写一个基于 MVC (.NET 4.0) 的网站,该网站需要来自公司 LDAP 服务器的登录凭据。我的代码需要的是只允许属于某个组的用户。例如,我可能正在寻找属于“企业 IT”组的用户。我的凭据可能是“系统管理员”组的一部分,该组是“公司 IT”的子组。我正在使用表单例份验证。

我如何在用户登录时递归地检查用户所属的组?

最佳答案

对于因搜索此类查询而来到这里的其他人,这是我在我的应用程序中的做法:

关键是1.2.840.113556.1.4.1941扩展搜索过滤器。由于此特定过滤器仅适用于 DN,因此我首先获取要检查的用户的 DN,然后查询组以查看此特定用户是否是链中任何组的成员。

internal const string UserNameSearchFilter = "(&(objectCategory=user)(objectClass=user)(|(userPrincipalName={0})(samAccountName={0})))";
internal const string MembershipFilter = "(&(objectCategory=group)(objectClass=group)(cn=MyGroup)(member:1.2.840.113556.1.4.1941:={0}))";

using (var de = new DirectoryEntry(AppSettings.LDAPRootContainer, AppSettings.AdminUser, AppSettings.AdminPassword, AuthenticationTypes.FastBind))
using (var ds = new DirectorySearcher(de) { Filter = string.Format(UserNameSearchFilter, username) })
{

ds.PropertiesToLoad.AddRange(new[] { "distinguishedName" });

var user = ds.FindOne();

if (user != null)
using (var gds = new DirectorySearcher(de) { PropertyNamesOnly = true, Filter = string.Format(MembershipFilter, user.Properties["distinguishedName"][0] as string) })
{
gds.PropertiesToLoad.AddRange(new[] { "objectGuid" });
return gds.FindOne() != null;
}
}

关于c# - 递归查询 LDAP 组成员资格,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7826927/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com