2015-06-09 62 views
6

我正在使用Active Directory为我的Web应用程序中的用户分配角色。 但是我发现在AD中更改用户安全组分配和传播给正在使用该应用程序的用户的更改之间似乎有很长时间的滞后。 实际上,当我从AD获取C#中的用户角色时,他们是最新的,但是当我运行此代码查看用户角色时,他们不会在第二天更新。如何从AD即时更新用户角色?更改Active Directory安全组和用户角色的时间差

var identity = WindowsIdentity.GetCurrent(); 
var groups = from sid in identity.Groups select sid.Translate(typeof(NTAccount)).Value; 
foreach (var group in groups) 
{ 
    groupName = group; 
} 

回答

2

这是因为Kerberos授权信息都存储在本地计算机(你的应用服务器)的高速缓存存储器,所以你可能无法得到了最新数据。

你有2种选择:

服务器
  • 使用UserPrincipal.GetAuthorizationGroups
    1. 强制更新票证授予票证(TGT)上不是从应用服务器而是从公元得到您的组。
  • +0

    我在选项1上做了Google搜索,但没有提出任何东西。我不得不承认我不熟悉TGT – arame3333

    +0

    选项2可能会让我成为我的成员,但我如何将它们设置为我应该在的角色? – arame3333

    0

    记住用户的令牌只有在他再次登录时才会更新。 AD将用户立即显示为组成员,但用户只能在组中的SID出现在他的令牌中后才能行使这些权限。

    因此,您需要检查AD以查看用户是否是特定组的成员,或者您必须等到用户在完成并复制组分配后才能登录。

    相关问题