2009-06-01 50 views
0

我有一个正在使用ActiveDirectoryMembershipProvider对用户进行身份验证的.NET MVC(1.0)应用程序,并且按原样正常工作。成功验证后,我正在为该用户创建一个SQL自定义配置文件(AD用户名,电子邮件等)。需要确定ActiveDirectory中的用户是否仍然有效/有效

在应用程序的一部分中,我正在向用户发送电子邮件警报,并且我正在通过持有AD用户名的本地SQL表中的用户进行循环,如上所述。在发送提醒之前,我想验证我们发送的用户仍然是AD中的有效(即活动)用户。我如何在没有我的循环中当前用户的密码的情况下进行检查?

我希望做soemthing像这样...

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

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

一旦你有你DirectoryEntry的问题(userAccount)的用户,你可以检查帐户禁用和帐户锁定是这样的:

// 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; 

马克

0

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

花了很长时间发布我的回复。马克的帖子其实更加详细,我会赞扬它。

相关问题