2011-02-01 56 views
4

我有一個用戶的,當我嘗試使用枚舉她要麼組 System.Security.Principal.WindowsIdentity.GetCurrent().Groups用戶的IIS服務器上的計算機 或System.Web.HttpContext.Current.Request.LogonUserIdentity.Groups上,我得到他們的老名單團體,而不是他們的新人。使用WindowsIdentity.GetCurrent()枚舉組返回老集集團

我已經檢查了DC他們進行身份驗證和ASP.NET頁面是SharePoint實例內運行,所以最喜歡LogonUserIdentity被從那裏Kerberos票據提供的。

我應該直接從AD,而不是依靠的WindowsIdentity或LogonUserIdentity仰視的羣體?

+0

因此,要完成循環。該組的標記從未刷新,直到她被添加回舊組並再次移除。此外,她被從新組中刪除並重新加入該組。這足以導致某些內容被重置,並迫使這些組在LoginUserIdentity中正確表示。 – 2011-10-06 19:50:14

回答

5

如果您使用WindowsIdentityLogonUserIdentity,它將從存儲在Kerberos票證授予票證(TGT)中的授權數據中檢索組信息。

它的強大和有用的,因爲一旦你驗證,你會得到的Kerberos TGT,則不需要再次查詢Active Directory以獲取所有組的信息。實際上,組枚舉相當昂貴和複雜。因此,首選Kerberos票據方式,並且在訪問任何Windows資源時使用此方法。

但是,這也意味着在將您的用戶帳戶添加到組後,WindowsIdentityLogonUserIdentity方法將不會知道新添加的組。您必須清除Kerberos票證並重新獲取它。您可以註銷並登錄,或者您可以鎖定屏幕並輸入密碼來解鎖屏幕。

如果由於某種原因,你仍然想要做的組查點自己,我建議你在.NET 3.5使用UserPrincipal.GetAuthorizationGroups。它返回用戶所屬的所有安全組。

+0

我知道這是一個老問題,但有這表明,註銷並再次打開將迫使WindowsIdentity.GetCurrent()組中更新任何文檔?我想確保在用戶註銷後重新開始每次都更新組 - 無法在MSDN上找到任何內容 – 2018-01-30 14:53:44