IsInRole 获取新的安全令牌

IsInRole Getting New Security Token

我正在使用 WindowsPrincipal 的 IsInRole 方法检查 WPF 和 Winforms 应用程序中的组成员身份。我正在生成一个身份令牌,它可以用于任何 AD 用户(不一定是实际登录到计算机的用户——取决于我在做什么,我不一定要进行身份验证,我只是使用基本信息级别令牌(我认为它的正确名称是 "identity token").

此代码第一次在特定计算机上 运行 时,操作系统会为指定的用户生成身份令牌。 IsInRole 函数随后使用该令牌来验证组成员身份。它很快,所以我真的很喜欢它。但是,创建 WindowsIdentity/WindowsPrincipal 的后续调用会引用现有令牌而不是创建新令牌。我知道如何更新令牌的唯一方法是注销计算机或重新启动(这会清除令牌缓存)。有谁知道重置缓存身份令牌的更好方法吗?

示例代码 C#:

Using System.Security.Principal;
WindowsIdentity impersonationLevelIdentity = new WindowsIdentity("Some_UserID_That_Isn't_Me", null);
WindowsPrincipal identityWindowsPrincipal = new WindowsPrincipal(impersonationLevelIdentity);
If (identityWindowsPrincipal.IsInRole("AN_AD_GROUP")) { ...

VB:

Imports System.Security.Principal
Dim impersonationLevelIdentity = New WindowsIdentity("Some_UserID_That_Isn't_Me", Nothing)
Dim identityWindowsPrincipal = New WindowsPrincipal(impersonationLevelIdentity)
if identityWindowsPrincipal.IsInRole("AN_AD_GROUP") then...

不确定这是否可以解决您的问题,请尝试直接或间接调用 WindowsIdentity class 的 dispose 方法。

using (WindowsIdentity impersonationLevelIdentity = new WindowsIdentity("Some_UserID_That_Isn't_Me", null))
{
  // your code
}

原来我错了。它正在缓存,但它似乎在 AD 端。最终在我创建新身份 WindowsPrincipal 后,它会更新为正确的组成员身份。