#c# #active-directory #passwords
#c# #active-directory #пароли
Вопрос:
Я работаю над инструментом, который перечисляет ряд свойств пользователя active Directory. В настоящее время я могу показать дату истечения срока действия, добавив 90 дней (типичная политика) к свойству lastPasswordSet. Однако некоторые учетные записи настроены так, чтобы срок действия никогда не истекал.
Я провел некоторое исследование и выяснил, что если свойство при преобразовании в длинное целое число равно 9223372036854775807, то срок действия пароля никогда не истекает (по крайней мере, мне так сказали).
Проблема, с которой я сталкиваюсь, заключается в том, что КАЖДАЯ учетная запись, которую я просматриваю, имеет 9223372036854775807 в качестве значения accountExpires. У меня есть инструмент Microsoft AD, и я могу проверить, для каких учетных записей фактически установлено значение «никогда не истекать», а для каких — через 90 дней. Я не уверен, что я делаю неправильно:
public bool doesPWExpire(string userDN)
{
DirectoryEntry ent = new DirectoryEntry(userDN);
//get account expires property
LargeInteger passChanged = ent.Properties["accountExpires"].Value as LargeInteger;
//convert to data type long
long int64Value = (long)((uint)passChanged.LowPart | (((long)passChanged.HighPart) << 32));
if (int64Value == 9223372036854775807)
{
return false;
}
else
{
return true;
}
}
Ответ №1:
Вы затягиваете.Максимальное значение, хорошее значение для «никогда». Ваш код непоследователен, вы считываете свойство «accountExpires», но присваиваете переменной с именем «passChanged». Это говорит о том, что вы действительно хотите прочитать свойство, связанное с паролем. Например, «maxPwdAge» и «PasswordLastChanged». Срок действия учетных записей обычно не истекает, срок действия паролей истекает.
Комментарии:
1. Спасибо за ваш ответ. В этом есть большой смысл. Знаете ли вы какой-либо другой способ определить, установлен ли в AD флажок «Срок действия пароля не истек»?
2. Почему бы вам просто не попробовать это? Создайте учетную запись с паролем, срок действия которого не истекает, проверьте, что вы получите обратно при чтении maxPwdAge.
3. Для чтения и настройки ‘Срок действия пароля никогда не истекает’ посмотрите на атрибут ‘userAccountControl’ и ADS_UF_DONT_EXPIRE_PASSWD
4. Срок действия учетных записей обычно не истекает, срок действия паролей истекает. Неверно. Дата истечения срока действия может быть установлена как для учетной записи, так и для пароля, срок действия обоих может истечь.
5. Пожалуйста, сосредоточьтесь на слове «обычно».
Ответ №2:
Я полагаю, DateTime expiry = DateTime.FromFileTime((int)ent.Properties["accountExpires"].Value)
это поможет вам
Комментарии:
1. Спасибо за ваш ответ. Я получаю недопустимое исключение приведения с этим кодом. Я продолжу играть с этим, но дайте мне знать, если у вас есть какие-либо другие идеи.
2. Возможно, вам придется преобразовать его в строку и вызвать int.parse или попробовать преобразовать в long . У меня нет под рукой тестовой среды.