我有一个代码,用于检查用户是否是AD的成员,工作得很好,
现在我想添加检查用户是否也是群组成员的可能性!
我需要修改什么来实现这一点,我做了一些工作,但它失败了!
所以这是我的代码:
//Authenticate a User Against the Directory
private bool Authenticate(string userName,string password, string domain)
{
if (userName == "" || password == "")
{
return false;
}
bool authentic = false;
try
{
DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain,userName, password);
object nativeObject = entry.NativeObject;
authentic = true;
}
catch (DirectoryServicesCOMException) { }
return authentic;
}
我想这样做:
private bool Authenticate(string userName,string password, string domain, string group)
答案 0 :(得分:24)
这在Windows XP或更早版本中不可用。
无论如何,为了检查组成员身份,您可以使用以下代码:
bool IsInGroup(string user, string group)
{
using (var identity = new WindowsIdentity(user))
{
var principal = new WindowsPrincipal(identity);
return principal.IsInRole(group);
}
}
答案 1 :(得分:7)
在ASP.Net中,您将使用Page.User.IsInRole("RoleName")
或在Windows中使用System.Threading.Thread.CurrentPrincipal.IsInRole("RoleName")
答案 2 :(得分:6)
我用这段代码解决了这个问题
public bool AuthenticateGroup(string userName, string password, string domain, string group)
{
if (userName == "" || password == "")
{
return false;
}
try
{
DirectoryEntry entry = new DirectoryEntry("LDAP://" + domain, userName, password);
DirectorySearcher mySearcher = new DirectorySearcher(entry);
mySearcher.Filter = "(&(objectClass=user)(|(cn=" + userName + ")(sAMAccountName=" + userName + ")))";
SearchResult result = mySearcher.FindOne();
foreach (string GroupPath in result.Properties["memberOf"])
{
if (GroupPath.Contains(group))
{
return true;
}
}
}
catch (DirectoryServicesCOMException)
{
}
return false;
}
它适用于我,它可以用于不属于域控制器/ Active Directory的计算机
谢谢大家的帮助