Проверьте IsInRole против AD - PullRequest
0 голосов
/ 18 февраля 2011

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

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

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

Ответы [ 2 ]

1 голос
/ 18 февраля 2011

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

1 голос
/ 18 февраля 2011

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

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

...