我有一个ASP.NET MVC站点的自定义角色提供程序,它使用PrincipalContext检索用户的角色,如下所示。
这样可以正常工作,除非在Active Directory中更改组与它出现在PrincipalContext中之间存在很长的延迟。
管理员可以通过网站更新群组,并希望立即可见。
如何避免这种延迟?某个地方有缓存吗?几个小时的谷歌搜索没有提出任何解决方案。
我认为这可能是环境问题,因为我的本地机器会立即执行此操作,但测试服务器不会这样做。
context = new PrincipalContext(ContextType.Domain, name, container, userName, _password))
var p = UserPrincipal.FindByIdentity(context, IdentityType.UserPrincipalName, username);
var groups = p.GetAuthorizationGroups();
答案 0 :(得分:1)
定义'long'!
Active Directory林可以划分为多个站点(与网站无关,将它们视为位置)。站点内服务器之间的复制每隔几秒执行一次。默认情况下,replication between sites is 3 hours,而replication withing sites is every 15 seconds。像所有东西一样,它实际上比那更复杂但是那样做。因此,如果您的服务器位于不同的站点并且您在本地域控制器(DC)上进行了更改,则您的更改可能需要一段时间才能复制到服务器使用的DC。 (3小时,顺便说一下,可以降低到15分钟。)如果您的站点和服务器站点之间有站点,并且它们之间没有直接链接,如果您的AD拓扑结构很大,则可能就是这种情况。复杂,您可能需要等待两个复制间隔。或者更多。
您需要与您的AD管理员联系以确定这一点。
您可以连接到服务器站点上的DC,对组成员身份进行更改,您可以更快地看到这些。如果您使用的是Active Directory用户和计算机或其他一些UI,那么这是非常合理的。如果您正在编写应用程序进行更改,请务必使用强大的方法来选择DC,这样您就不会失去AD多主拓扑的优势。