c# - 无法获取用户的域成员组列表
问题描述
我正在使用下面的 C# 代码来检查用户是否是所需域成员组的一部分。
传递的用户名是 3 个成员组的一部分,但代码返回第一个域组成员名称并退出 for 循环。请帮我获取用户的整个域组列表。
bool bReturn = false;
string sDomainName = System.Environment.UserDomainName;
using (PrincipalContext oContext = new PrincipalContext(ContextType.Domain, sDomainName))
{
if (oContext.ValidateCredentials(sUserName, sPassword))
{
using (PrincipalSearcher oSearcher = new PrincipalSearcher(new UserPrincipal(oContext)))
{
oSearcher.QueryFilter.SamAccountName = sUserName;
Principal oPrincipal = oSearcher.FindOne();
foreach (Principal oPrin in oPrincipal.GetGroups())
{
if (oPrin.Name.Trim().ToString().Equals(sGroupName))
{
bReturn = true;
break;
}
}
}
}
解决方案
而不是你的循环,使用IsMemberOf
方法:
bReturn = oPrincipal.IsMemberOf(oContext, IdentityType.Name, sGroupName);
这可能对你有用。但请记住,这(和您的循环方法)仅memberOf
在用户属性中列出该组时才有效。如果:
- 您的 AD 林中有多个域,并且
- 您正在使用的组是全局或域本地,并且
- 该组与用户不在同一个域中
那么它将无法正常工作。
我在我的网站上写的一篇文章中谈到了这一点:找出一个用户是否是组的成员
推荐阅读
- java - 用于 CompositeKey 最低要求的 Spring JPA @IdClass
- javascript - 如何使用 jest 在 typescript 中模拟函数类型
- java - 为 Spring Boot 应用程序部署新功能的最佳实践是什么?
- mysql - 如何编写这样的 SQL
- hibernate - 数据异常:字符串数据,右截断错误
- java - 如何以通用方式使用算术运算减少原始数组?
- java - 无法解决端点响应的符号错误
- c# - 客户端仅接收 1440 字节的流
- python - 由于阶段故障而中止作业:将 spark 数据帧转换为 Pandas 数据帧时
- c# - 实体框架核心:外键已设置并被召回为空