我需要检查我的应用程序中的用户是否是活动目录中的活动用户。 当其中一个用户别名变为无效时,我需要发送通知。
在大多数示例中,我看到使用LDAP一次仅针对ADFS验证一个用户,这将需要很长时间的大量用户。
有什么方法可以通过发送用户列表进行验证并验证,以便更快?
感谢。
答案 0 :(得分:0)
在ADFS中打开框,没有。
这听起来像你应该从你的应用程序调用的东西。使用AD C#API。
参考Howto: (Almost) Everything In Active Directory via C#。
或(在某些情况下)Everything in Active Directory via C#.NET 3.5 (Using System.DirectoryServices.AccountManagement)
答案 1 :(得分:0)
从.Net 3.5开始,有System.DirectoryServices.AccountManagement
我的代码类似
public List<string> InvalidUsernames (List<string> usernames)
{
var result = new List<string>();
var domainName = "OkieDokie";
var ldapContext = new PrincipalContext(ContextType.Domain, domainName);
foreach (var username in usernames)
{
var user = UserPrincipal.FindByIdentity(ldapContext, username);
if (user == null) //null means it couldn't be found
{
result.Add(username);
}
}
return result;
}
但这一切都取决于你认为有效/无效的内容。如果您可以检查user.AccountExpirationDate(?date)或user.Enabled(?bool)。
或者,如果你有一个共同的群组,你可以替换以前的foreach并使用:
var usersGroup = UsernamesInGroup("theONEgroup");
foreach (var username in usernames)
{
var user = UserPrincipal.FindByIdentity(ldapContext, username);
if (user == null) //null means it couldn't be found
{
result.Add(username);
}
}
public List<string> UsernamesInGroup(string groupName)
{
GroupPrincipal grupo = GroupPrincipal.FindByIdentity(MainOU, groupName);
return UsernamesInGroup(group);
}
public List<string> UsernamesInGroup(GroupPrincipal gp)
{
List<string> userNames = new List<string>();
var principalsInGroup = gp.GetMembers(true);
foreach (Principal principal in principalsInGroup)
{
if (principal.StructuralObjectClass == "user")
{
userNames.Add(principal.SamAccountName);
}
}
return userNames;
}