سؤال

لدي سمة مصادقة بسيطة للغاية وأحاول تنفيذها في تطبيق ASP.NET MVC 5 وأواجه بعض المشاكل.أريد أن يتم تطبيق السمة عالميًا، باستثناء إجراءات محددة داخل وحدة التحكم (على سبيل المثال، نموذج تسجيل الدخول والصفحة الرئيسية).

لقد حاولت تزيين الإجراء بـ [OverrideAuthentication] السمة مع عدم وجود حظ.إنه يعطيني خطأ في حلقة إعادة التوجيه لأن التطبيق لا يزال يقوم بتشغيل المصادقة في نموذج تسجيل الدخول، ويستمر في محاولة إعادة التوجيه مرة أخرى إلى نموذج تسجيل الدخول مرارًا وتكرارًا.

هل رأى أي شخص آخر هذا السلوك؟هل لديك أي فكرة عما قمت بتعبئته هنا؟

على سبيل المثال، قمت بإنشاء مرشح بسيط للغاية لم يتم تنفيذه حاليًا:

public class BasicAuthenticationAttribute
    : ActionFilterAttribute, IAuthenticationFilter
{

    public void OnAuthentication(AuthenticationContext filterContext)
    {
        throw new NotImplementedException();
    }

    public void OnAuthenticationChallenge(AuthenticationChallengeContext filterContext)
    {
        throw new NotImplementedException();
    }
}

إذا قمت بتزيين وحدة التحكم/الإجراء الخاص بي مثل هذا:

[BasicAuthentication]
public class AccountController : Controller
{
    [HttpGet]
    [OverrideAuthentication]
    public ActionResult Login()
    {
        return View();
    }
}

أحصل على استثناء لم يتم تنفيذه عندما انتقل إلى إجراء تسجيل الدخول، على الرغم من أن هذا الإجراء لا ينبغي أن يقوم بتشغيل رمز المصادقة على الإطلاق.هل أساءت فهم كيف من المفترض أن تعمل التجاوزات؟

هل كانت مفيدة؟

المحلول

أعتقد أنك خلطت بين المصادقة والتفويض (كما يفعل كثير من الناس).ليس من المنطقي إنشاء [BasicAuthenticationAttribute] وتسجيله عالميًا، لأن المصادقة تحدث فقط عند تسجيل الدخول، وليس عند كل طلب.

التفويض هو ما يحدث بعد قيام المستخدم بتسجيل الدخول للتحقق مما إذا كان المستخدم لديه الامتيازات المطلوبة للقيام بإجراء معين، ومن المنطقي إجراء التفويض على مستوى العالم.تتم معالجة التفويض في MVC بواسطة [AuthorizeAttribute] ويمكنك توريثه إذا كنت بحاجة إلى تخصيص طريقة إجراء فحص التفويض.يمكنك أيضًا تسجيله كمرشح عالمي.

يعمل [AllowAnonymousAttribute] جنبًا إلى جنب مع [AuthorizeAttribute] ويطلب منه بشكل أساسي تخطي فحص التفويض.تجدر الإشارة أيضًا إلى أن [AllowAnonymousAttribute] لن يكون له أي تأثير ما لم يتم استخدامه مع [AuthorizeAttribute].

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