【问题标题】:Check IsInRole against AD针对 AD 检查 IsInRole
【发布时间】:2011-02-18 15:01:25
【问题描述】:

我最近尝试使用 WindowsPrincipal,但我真的很困惑。我用这个代码sn-p:

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

它返回 True 所以没关系。但我认为这个“IsInRole”检查适用于 Active Directory。但是当我拔下网线时它仍然返回true。怎么会?有什么简单的方法可以检查登录的用户是否在针对 AD 的特定域中?

【问题讨论】:

    标签: active-directory


    【解决方案1】:

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

    【讨论】:

      【解决方案2】:

      您的代码很好,Windows 比我们想象的要智能一些,即使您断开网络电缆,Windows 也会缓存用户组成员身份,事实上,如果您在 AD 域中,您也可以拔下电缆并仍然登录-in 因为所有内容都在本地缓存。

      如果您想真正检查它是如何工作的,请尝试拔下电缆,在断开连接时检查另一个组成员身份,这将是错误的,然后将您的用户添加到服务器上的另一个组,此检查只有在您连接后才会通过您的机器再次连接到网络并注销/登录。

      【讨论】:

      • 感谢您的快速回答,但这不是安全问题吗?当我使用此代码 sn-p 在服务器端进行身份验证(通过 WCF 服务的 OperationContext)时,即使不再授权的用户(被踢出某个组)也可以登录,直到服务器注销并登录?
      猜你喜欢
      • 1970-01-01
      • 2011-09-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-10-05
      • 2014-05-27
      • 2013-04-28
      相关资源
      最近更新 更多