PrincipalContext没有从活动目录获取最新的用户角色

时间:2013-11-11 15:57:35

标签: asp.net active-directory roles roleprovider principalcontext

我有一个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();

1 个答案:

答案 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多主拓扑的优势。