检查用户列表是否对C#中的adfs有效

时间:2013-06-20 05:22:54

标签: active-directory ldap directoryservices adfs

我需要检查我的应用程序中的用户是否是活动目录中的活动用户。 当其中一个用户别名变为无效时,我需要发送通知。

在大多数示例中,我看到使用LDAP一次仅针对ADFS验证一个用户,这将需要很长时间的大量用户。

有什么方法可以通过发送用户列表进行验证并验证,以便更快?

感谢。

2 个答案:

答案 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;
}