使用WindowsIdentity.GetCurrent()枚举组返回旧的组集

Way*_*ton 4 asp.net credentials active-directory

我有一个用户,当我尝试使用System.Security.Principal.WindowsIdentity.GetCurrent().Groups用户的计算机或System.Web.HttpContext.Current.Request.LogonUserIdentity.GroupsIIS服务器上枚举她的组时 ,我会得到他们旧组的列表,而不是他们的新组.

我检查了他们进行身份验证的DC,并且ASP.NET页面在SharePoint实例中运行,因此LogonUserIdentity最喜欢从Kerberos票证中提供.

我应该直接从AD中查找组而不是依赖于WindowsIdentity或LogonUserIdentity吗?

Har*_*wok 5

如果您使用WindowsIdentityLogonUserIdentity,它将从存储在Kerberos票证授予票证(TGT)中的授权数据中检索组信息.

它功能强大且实用,因为一旦通过身份验证并获得Kerberos TGT,您就无需再次查询Active Directory以获取所有组信息.实际上,群组枚举非常昂贵且复杂.因此,首选Kerberos票证方法,并在访问任何Windows资源时使用此方法.

但是,这也意味着在将用户帐户添加到组后,WindowsIdentity或者LogonUserIdentity方法将不知道新添加的组.您必须清除Kerberos票证并再次获取它.您可以注销然后登录,也可以锁定屏幕并输入密码来解锁屏幕.

如果由于某些原因,您仍然希望自己进行组枚举,我建议您在.NET 3.5中使用UserPrincipal.GetAuthorizationGroups.它返回用户所属的所有安全组.