Active directory 检查用户列表是否对C中的ADF有效#

Active directory 检查用户列表是否对C中的ADF有效#,active-directory,ldap,directoryservices,adfs,Active Directory,Ldap,Directoryservices,Adfs,我需要检查应用程序中的用户是否是active directory中的活动用户。 当其中一个用户别名无效时,我需要发送通知 在大多数示例中,我看到使用LDAP每次仅验证一个用户与ADF之间的差异,这将花费大量用户很长的时间 是否有任何方法可以通过发送一个用户列表进行验证,以便更快地进行验证 谢谢。在ADFS中开箱即用,不用了 这听起来像是你应该从应用程序中调用的东西。使用AD C#API 参考 或者(在某些情况下) 从.NET3.5开始,有System.DirectoryServices.Acco

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

在大多数示例中,我看到使用LDAP每次仅验证一个用户与ADF之间的差异,这将花费大量用户很长的时间

是否有任何方法可以通过发送一个用户列表进行验证,以便更快地进行验证


谢谢。

在ADFS中开箱即用,不用了

这听起来像是你应该从应用程序中调用的东西。使用AD C#API

参考

或者(在某些情况下)

从.NET3.5开始,有System.DirectoryServices.AccountManagement

我会编写类似这样的代码

公共列表无效用户名(列表用户名)
{
var result=新列表();
var domainName=“OkieDokie”;
var ldapContext=新的PrincipalContext(ContextType.Domain,domainName);
foreach(用户名中的var用户名)
{
var user=UserPrincipal.FindByIdentity(ldapContext,用户名);
if(user==null)//null表示找不到它
{
结果.添加(用户名);
}
}
返回结果;
}
但是这完全取决于你考虑的活动/无效。在中,如果可以检查user.AccountExpirationDate(?date)或user.Enabled(?bool)

或者,如果您确实有一个用于所有这些功能的通用组,则可以替换以前的foreach并使用:

var usersGroup=UsernamesInGroup(“theONEgroup”);
foreach(用户名中的var用户名)
{
var user=UserPrincipal.FindByIdentity(ldapContext,用户名);
if(user==null)//null表示找不到它
{
结果.添加(用户名);
}
}
公共列表UsernamesInGroup(字符串groupName)
{
GroupPrincipal grupo=GroupPrincipal.FindByIdentity(MainOU,groupName);
返回UsernamesInGroup(组);
}
公共列表用户名组(GroupPrincipal gp)
{
列表用户名=新列表();
var principalsinggroup=gp.GetMembers(true);
foreach(principalsInGroup中的Principal)
{
if(principal.StructuralObjectClass==“用户”)
{
userNames.Add(principal.SamAccountName);
}
}
返回用户名;
}

这已经过时了。有一个更简单的方法,哪一个更简单?你是说会计管理吗?这只是一个子集。所以,在某些情况下,它并没有过时。是的,会计管理。我认为子集就足够了,编码也会容易得多。你说的“活动”是什么意思,“无效”是什么意思?他们不是在一个特定的群体中吗?