检查IsInRole是否对抗AD

时间:2011-02-18 15:01:26

标签: active-directory

我最近尝试使用WindowsPrincipal,但我真的很困惑。我使用此代码段:

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

它返回True,所以没关系。但我认为这个“IsInRole”检查对Active Directory起作用。但是,当我拔下网络电缆时,它仍然返回true。怎么会?有没有简单的方法来检查记录的用户是否在针对AD的特定域中?

2 个答案:

答案 0 :(得分:1)

您的代码很好,Windows比我们的想法更聪明,即使断开网络电缆也会缓存用户组成员资格,事实上如果您在AD域中,您也可以拔掉电缆并仍然记录-in因为所有内容都在本地缓存。

如果您想确切检查其工作原理,请尝试拔下电缆,检查断开连接时是否有其他组成员身份,这将是假的,然后将您的用户添加到服务器上的另一个组,此检查仅在您连接后通过您的机器再次进入网络并进行注销/登录。

答案 1 :(得分:1)

可以在本地系统上缓存Active Directory凭据,包括角色成员身份(以支持组策略实施)。您可以按照MSDN知识库Cached Domain Logon Information中的说明关闭凭据缓存,但我不确定是否会清除缓存。虽然我无法确认(因为我目前不在具有缓存凭据的系统上),但我相信它们在注册表项HKEY_LOCAL_MACHINE \ SECURITY \ CACHE \下以哈希值存储在标记为" NLx"的值中。其中x是整数。