Необходимо определить, является ли пользователь в ActiveDirectory по-прежнему действительным / активным - PullRequest
0 голосов
/ 01 июня 2009

У меня есть приложение .NET MVC (1.0), которое использует ActiveDirectoryMembershipProvider для аутентификации пользователей, и это работает нормально, как есть. После успешной аутентификации я создаю пользовательский профиль в SQL для этого пользователя (имя пользователя AD, адрес электронной почты и т. Д.).

В одной части приложения я отправляю пользователям оповещения по электронной почте и зацикливаюсь на пользователях из локальной таблицы SQL, содержащей имя пользователя AD, упомянутое выше. Перед отправкой оповещения я хотел бы убедиться, что пользователь, которому мы отправляем, все еще является действительным (то есть активным) пользователем в 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.

Спасибо

Mike

Ответы [ 2 ]

2 голосов
/ 02 июня 2009

Вам необходимо проверить флаг пользователя 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 голосов
/ 02 июня 2009

Если вы запросите атрибуты / свойства пользователя в AD, свойство userAccountControl будет иметь значение 514, если учетная запись заблокирована, или 512, если оно готово для входа в систему.

Потребовалось много времени, чтобы опубликовать мой ответ. Пост Марка на самом деле более подробный, и я буду его голосовать.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...