2015-06-09 88 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以查看用戶是否是特定組的成員,或者您必須等到用戶在完成並複製組分配後才能登錄。

    相關問題