如何确保 IsInRole 检查不使用缓存的凭据

Posted

技术标签:

【中文标题】如何确保 IsInRole 检查不使用缓存的凭据【英文标题】:How can I ensure that IsInRole checks are not using cached credentials 【发布时间】:2011-10-05 04:06:40 【问题描述】:

我有一个连接到 WCF 服务的 WPF 客户端,我想锁定某些功能,以便只有某些用户可以执行某些操作。 WCF 服务在执行服务方法时模拟客户端用户。操作系统是 Windows XP。

我正在阅读 this question 作为我调查将用户角色应用于我的应用程序功能的最佳方式的一部分(我想将用户分配到 AD 安全组,然后检查 IsInRole),并且担心缓存的权限将允许已减少权限的用户访问他们不再有权访问的功能。相反,我也担心权限升级后的用户需要注销他们的 Windows 帐户,甚至可能需要重新启动 WCF 服务(最坏的情况)才能访问新功能。

确保客户端和服务器都能立即看到对 AD 安全组的更改的最简单方法是什么?

【问题讨论】:

角色成员的更改需要一些时间才能传播(包括用户新登录)是很正常的。例如,如果您有主域控制器和辅助域控制器,则同步更改也可能需要很长时间并且用户仍然可以从辅助控制器接收旧权限。 @Ladislav Mrnka 我想我将不得不忍受一些延迟,但我特别想避免使用本地缓存的权限(在用户的机器上)。我不知道 WCF 服务是否会在模拟用户时发出自己的请求来检查角色成员身份,或者它是否会从客户端接收这些详细信息以及身份。 【参考方案1】:

您始终可以实现自己的成员资格提供程序来查询 AD。 这非常简单,您可以确保所有权限评估都是准确的,或者至少完全符合您的要求。

如果您发现在每次评估时查询 AD 服务器的性能“昂贵”,您可以在客户端上创建自己的缓存,您可以强制定期或按需刷新。 该缓存可以像权限索引列表(如字典)一样简单,您可以快速查询。

这是一篇关于如何与 AD 交互的好文章: http://www.codeproject.com/KB/system/everythingInAD.aspx

【讨论】:

好的,这是一篇相当全面的文章,谢谢!我想我必须尝试一下,看看查询有多慢,但是在客户端启动时执行一次是我需要填补我最担心的安全漏洞的最低要求:)

以上是关于如何确保 IsInRole 检查不使用缓存的凭据的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 成员资格 - 使用哪个 RoleProvider 以便 User.IsInRole() 检查 ActiveDirectory 组?

如何获取贝宝的实时 api 凭据?

如何刷新存储的 Google oAuth 凭据

User.IsInRole 返回 false

如何在 Eclipse 中更改 SVN 存储库的凭据?

Azure 广告在声明中返回角色,但 User.IsInRole 返回 false