ASP.NET C # Active Directory - посмотрите, как долго истекает срок действия пароля пользователя - PullRequest
4 голосов
/ 01 сентября 2009

У меня есть интересная проблема, я пишу веб-страницу / службу управления паролями и пытаюсь найти способ определить, когда истекает срок действия пароля пользователя, чтобы я мог вручную сбросить с него другие его пароли и отправить электронная почта и т. д.

Проблема, с которой я сталкиваюсь, заключается в том, что, пытаясь перебрать своих пользователей, я получаю большинство из них без атрибута pwdlastset, поэтому не могу определить, когда он истекает.

Так что, я думаю, я ищу идеи о том, как проверить, когда срок действия пароля пользователя истекает, кроме использования свойства pwdlastset и расчета оставшегося времени.

Спасибо большое.

Ответы [ 3 ]

8 голосов
/ 01 сентября 2009

На самом деле все немного сложнее, чем вы думаете на первый взгляд ...

  • Чтобы узнать, как долго может быть действителен пароль, вам нужно прочитать «политику домена» и узнать, как это сделать

Тогда:

  • если у пользователя установлен флаг «UF_DONT_EXPIRE_PASSWD» в его «userAccountControl», его пароль никогда не истечет
  • если значение "pwdLastSet" (значение "ADSLargeInteger" или Int64, которое довольно сложно читать в первую очередь) равно 0, пользователю придется изменить свой пароль при следующем входе в систему
  • если значение "pwdLastSet" равно -1, пароль никогда не был установлен
  • только если ничего из вышеперечисленного не соответствует действительности, тогда значение «pwdLastSet» содержит дату, когда пароль был последний раз установлен, к которому вы можете добавить «MaxPasswordAge» из политики домена, и это даст вам дату, когда срок действия пароля пользователя истекает

Уф! Вы думали, что это будет так сложно? :-)

Марк

PS: Если вы серьезно относитесь к программированию AD на основе .NET, вы должны иметь эту книгу:

DevGuide

Руководство разработчика по .NET для программирования служб каталогов

Книга содержит все вкусности, такие как определение срока действия пароля пользователя, определение состояния блокировки учетной записи пользователя и многое другое - настоятельно рекомендуется! Джо и Райан проделали выдающуюся работу, собрав всю эту информацию и объяснив ее так, что даже обычный программист Джо, такой как я, может ее понять: -)

0 голосов
/ 16 мая 2018

Вот еще один подход:

public static DateTime GetPasswordExpirationDate(UserPrincipal user)
{
    DirectoryEntry deUser = (DirectoryEntry)user.GetUnderlyingObject();
    ActiveDs.IADsUser nativeDeUser = (ActiveDs.IADsUser)deUser.NativeObject;
    return nativeDeUser.PasswordExpirationDate;
}

Вам нужно будет добавить ссылку на COM-библиотеку ActiveDS, которая обычно находится в C: \ Windows \ System32 \ activeds.tlb.

0 голосов
/ 01 сентября 2009

Насколько мне известно, если pwdlastset равен нулю или отсутствует, пользователю необходимо изменить свой пароль при следующем входе в систему или его учетная запись настроена с использованием пароля с истекающим сроком действия. Может ли это быть причиной того, что вы видите?

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