我正在使用Active Directory为我的Web应用程序中的用户分配角色.
但是,我发现在更改AD中的用户安全组分配与传播给正在使用该应用程序的用户的更改之间似乎存在很长时间的延迟.
实际上,当我从AD检索C#中的用户角色时,它们是最新的,但是当我运行此代码来查看用户的角色时,它们直到第二天才会更新.如何从AD即时进行用户角色更新?
但是,我发现在更改AD中的用户安全组分配与传播给正在使用该应用程序的用户的更改之间似乎存在很长时间的延迟.
实际上,当我从AD检索C#中的用户角色时,它们是最新的,但是当我运行此代码来查看用户的角色时,它们直到第二天才会更新.如何从AD即时进行用户角色更新?
var identity = WindowsIdentity.GetCurrent(); var groups = from sid in identity.Groups select sid.Translate(typeof(NTAccount)).Value; foreach (var group in groups) { groupName = group; }
解决方法
发生这种情况是因为Kerberos授权信息存储在本地计算机(您的应用服务器)的高速缓存内存中,因此您可能无法获取非最新数据.
你有2个选择:
>强制更新服务器上的票证授予票证(TGT)
>使用UserPrincipal.GetAuthorizationGroups使您的组不是来自应用服务器而是来自AD.