ユーザーになりすます際に問題が発生しています。次のように宣言されたメソッドがあります。
[PrincipalPermission(SecurityAction.Demand, Name=@"DJPITER-PC\Test", Role="LocalTestGroup")]
static void LocalTestGroupOnly()
{
Console.WriteLine("Inside LocalTestGroupOnly() - {0}",
WindowsIdentity.GetCurrent().Name);
}
呼び出しコードは次のとおりです。
WindowsImpersonationContext context =
WindowsIdentity.Impersonate(token);
Console.WriteLine("Calling LocalTestGroupOnly() as {0}",
WindowsIdentity.GetCurrent().Name);
LocalTestGroupOnly();
context.Undo();
try
{
// Reverted user is displayed properly
Console.WriteLine("Calling LocalTestGroupOnly() as {0}",
WindowsIdentity.GetCurrent().Name);
// This method should fail but if succeeds
LocalTestGroupOnly();
}
catch (SecurityException ex)
{
Console.WriteLine("Your account lacks permission to that function.");
}
デフォルト ユーザーは LocalTestGroup のメンバーではありません。トークンで示されるユーザーは、LocalTestGroup のメンバーです。
問題:
LocalTestGroupOnly() の最初の呼び出しは成功します。これは、トークンによって示されるユーザーが LocalTestGroup のメンバーであるためです。LocalTestGroupOnly() への 2 回目の呼び出し (デフォルト ユーザーとして) は失敗するはずです。これは、デフォルト ユーザーが「Test」ではなく、LocalTestGroup に属していないためです。問題は、この方法も成功することです。
プログラムを個別に実行すると、偽装の有無にかかわらず動作が正しくなります。「テスト」として偽装すると成功し、デフォルトユーザーとして呼び出すと失敗します。
ここの問題は何ですか?