المطالب الأمنية المعلن - هل SecurityAction.Demand مؤقتا؟
-
03-07-2019 - |
سؤال
وأواجه مشكلة خلال انتحال صفة مستخدم. لقد طريقة أعلن مثل هذا:
[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.");
}
والمستخدم الافتراضي هو NOT عضوا في LocalTestGroup. العضو المشار إليها بواسطة رمز هو عضوا في LocalTestGroup.
المشكلة:
وهذه الدعوة الأولى لLocalTestGroupOnly () تنجح لأن المستخدم يدل على ذلك المنوال هو عضوا في LocalTestGroup. يجب أن تفشل المكالمة الثانية (كمستخدم الافتراضي) إلى LocalTestGroupOnly () لأن المستخدم الافتراضي هو ليس 'اختبار' وأنها لا تنتمي إلى LocalTestGroup. والمشكلة هي أن هذا الأسلوب نجح أيضا.
إذا قمت بتشغيل برنامج على حدة - مع وبدون الانتحال سلوك لنا صحيح: نجحت عندما ينتحل باسم 'اختبار' ويفشل عند الاتصال كمستخدم الافتراضي
ما هي المشكلة هنا؟
المحلول
هل يمكن أن تحقق Thread.CurrentPrincipal.Identity
بدلا من WindowsIdentity.GetCurrent()
؟ PrincipalPermission.Demand()
يستخدم لأول مرة.
لتغيير Thread.CurrentPrincipal
(أو HttpContext.User
) يبدو أن لديك لتعيين بشكل صريح بعد التمثيل أو بعد التراجع. تحقق هنا لسؤال مماثل .