需要确定Active Directory中的用户是否仍然有效/活动

时间:2009-06-01 19:52:24

标签: validation active-directory

我有一个.NET MVC(1.0)应用程序正在使用ActiveDirectoryMembershipProvider对用户进行身份验证,这样可以正常工作。身份验证成功后,我在SQL中为该用户创建自定义配置文件(AD用户名,电子邮件等)。

在应用程序的一部分中,我正在向用户发送电子邮件警报,我正在循环使用上面提到的包含AD UserName的本地SQL表中的用户。在发送警报之前,我想验证我们发送给的用户仍然是AD中的有效(即活动)用户。如何在没有我循环中当前用户的密码的情况下检查这个?

我希望能像这样做......

MembershipUser adUser= Membership.GetUser(userName); //I have the username from the loop
bool isValid = adUser.isValid; //I know this is not a real property

我知道没有这样的名为“isValid”的属性 - 但是有谁知道我应该使用什么属性?如果MembershipUser没用,那么我假设我需要编写一些调用System.DirectoryServices.ActiveDirectory命名空间的代码?如果是这样,我应该在AD中检查哪些属性以查看用户是否有效?并且“有效”,我的意思是用户仍然可以为相关公司工作,并且能够通过AD登录。我并不关心用户在AD中的群组成员资格。

谢谢,

麦克

2 个答案:

答案 0 :(得分:2)

您基本上需要检查用户userAccountControl标志的disabled标志。

有问题的用户(userAccount)获得DirectoryEntry后,您可以检查帐户已停用且帐户被锁定,如下所示:

// get the "userAccountControl" property
int uac = Convert.ToInt32(userAccount.Properties["userAccountControl"][0]);

const int ADS_UF_ACCOUNTDISABLE = 0x00000002;
const int ADS_UF_LOCKOUT = 0x00000010;

bool accountIsDisabled = (uac & ADS_UF_ACCOUNTDISABLE) == ADS_UF_ACCOUNTDISABLE;
bool accountIsLockedOut = (uac & ADS_UF_LOCKOUT) == ADS_UF_LOCKOUT;

马克

答案 1 :(得分:0)

如果在AD中查询用户属性/属性,则如果帐户被锁定,则userAccountControl属性为514,如果已准备好登录,则为512.

很长时间发表我的回复。 Marc的帖子实际上更详细,我会赞成它。