سؤال

وأواجه مشكلة خلال انتحال صفة مستخدم. لقد طريقة أعلن مثل هذا:

[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) يبدو أن لديك لتعيين بشكل صريح بعد التمثيل أو بعد التراجع. تحقق هنا لسؤال مماثل .

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top