WindowsPrincipal の IsInRole メソッドを使用して、WPF および Winforms アプリのグループ メンバーシップを確認しています。私は任意の AD ユーザー (実際にコンピューターにログインしているユーザーである必要はありません。私が行っていることによっては、必ずしも認証する必要はありません。基本的な情報レベルのトークンを使用するだけです) 用の ID トークンを生成しています (適切な名前は「IDトークン」だと思います)。
このコードが特定のコンピューターで初めて実行されると、オペレーティング システムは、指定されたユーザーの ID トークンを生成します。その後、そのトークンは IsInRole 関数によって使用され、グループ メンバーシップが検証されます。速いのでとても気に入っています。ただし、WindowsIdentity/WindowsPrincipal を作成するための後続の呼び出しは、新しいトークンを作成するのではなく、既存のトークンを参照します。トークンを更新する方法を知っている唯一の方法は、コンピューターからログアウトするか、再起動することです (これにより、トークン キャッシュがクリアされます)。キャッシュされた ID トークンをリセットするより良い方法を知っている人はいますか?
コード例 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...