2009-06-01 94 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。

花了很長時間發佈我的回覆。馬克的帖子其實更加詳細,我會讚揚它。

相關問題