سؤال

أنا محتار في ASP.NET MVC التخزين المؤقت إذن في حاجة ماسة إلى بعض التوضيح.

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

الآن العقل بندر بالنسبة لي: AuthorizeCore سوف تفشل في كل مرة عندما كنت في الواقع لا التخزين المؤقت الصفحة من ذاكرة التخزين المؤقت.والسبب هو أنه عندما طلب مؤقتا ، httpContext.Session الموردة مع AuthorizeCore هو null!?هنا بعض تبسيط كود:

protected override bool AuthorizeCore(HttpContextBase httpContext) {
    return (Session["userId"] != null)
}

حتى إذا httpContext.Session هو null, هذا ومن الواضح أن يفشل في كل مرة.كنت بحاجة إلى الوصول إلى الدورة رغم أن, كيف يمكنني معرفة إذا كان الطلب تأذن ؟ هذا لا يجعل من أي معنى - إذا كان هذا هو ما ينبغي أن يكون ثم أود أن أبدا تكون قادرة على استخدام الصفحات المخزنة مؤقتا مع المصادقة في ASP.NET MVC.مساعدة ؟

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

المحلول

هناك نوعان من أسئلة منفصلة:

  1. هل المصادقة العمل مع التخزين المؤقت في MVC?
  2. لا جلسة العمل قبل المصادقة في مواجهة ذاكرة التخزين المؤقت (حتى غير مصادق المستخدمين الذين لا يزال لديهم أمل في الدورة فريدة من نوعها)?

الأجوبة على التوالي ، هي نعم ولا.المصادقة يعمل بشكل جيد مع التخزين المؤقت.محاولة ذلك مع SQL أو عضوية المجال مقدمي;سترى.

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

المزيد من نقاط المكافأة:كيف يمكن هذا التغيير إذا حددت varyByUser في ذاكرة التخزين المؤقت التكوين ؟

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

نقطة أخرى:على ASP.NET الدورة مزود ASP.NET عضوية مقدم تماما منفصلة.عضوية مختلفة يمكن للمستخدمين مشاركة (!) الدورة ، نعم, يمكنك الهجوم موقع هذا الطريق.فمن أبدا آمنة لوضع الأمن ذات الصلة معلومات في الدورة.الأمن هو الثابت.

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