Проверьте IsInRole против AD

Я недавно пытался работать с WindowsPrincipal, но я действительно запутался. Я использую этот фрагмент кода:

WindowsPrincipal principal = new WindowsPrincipal(WindowsIdentity.GetCurrent());
MessageBox.Show(Thread.CurrentPrincipal.IsInRole("MyDomain\\Users").ToString());

Возвращает True, так что все в порядке. Но я думал, что эта проверка "IsInRole" работает против Active Directory. Но когда я отключаю сетевой кабель, он все равно возвращает истину. Как так? Есть ли простой способ проверить, находится ли зарегистрированный пользователь в определенном домене против AD?

2 ответа

Решение

Учетные данные Active Directory могут кэшироваться в локальной системе, включая членство в ролях (для поддержки применения групповой политики). Вы можете отключить кэш учетных данных, как описано в информации о входе в кэшированный домен MSDN KB, но я не уверен, что очистит кэш. Хотя я не могу подтвердить (поскольку в настоящее время я не нахожусь в системе с кэшированными учетными данными), я считаю, что они хранятся в виде хэшей под ключом реестра HKEY_LOCAL_MACHINE\SECURITY\CACHE\ в значениях, помеченных как "NLx", где x - целое число.

Ваш код в порядке, Windows немного умнее, чем мы думаем, и кеширует членство в группе пользователей, даже когда вы отключаете сетевой кабель, фактически, если вы находитесь в домене AD, вы также можете отсоединить кабель и все равно войти в систему, потому что все кешируется локально.

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

Другие вопросы по тегам