Thread.CurrentPrincipal تعيين في Application_AuthenticationRequest لم يتم تعيينه لاحقًا في التطبيق

StackOverflow https://stackoverflow.com/questions/809727

  •  03-07-2019
  •  | 
  •  

سؤال

في ملف Global.asax لـ Application_AuthenticationRequest أقوم بتعيين thread.currentPrincipal إلى مدير مخصص. أنا أيضا تعيين httpcontext.current.user على نفس المدير.

ومع ذلك ، في وقت لاحق في التطبيق عندما أحتاج إلى إلقاء thread.currentPrincipal إلى نوعنا المخصص ، أحصل على خطأ في وقت التشغيل قائلاً: غير قادر على إلقاء كائن من النوع "system.web.security.roleprincipal" لكتابة "OurCustomPrincipal".

كيف تم إعادة تعيين thread.currentPrincipal إلى RolePrincipal ، وأكثر من ذلك إلى حد أن أبقيه في customprincipal التي وضعناها في Global.asax

شكرا مقدما

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

المحلول

من المؤكد أنك قمت بحل مشكلتك الآن ولكن فقط في حالة ، إذا كنت تستخدم Roleprovider من ASP.NET ، فإن Rolemanagermodule يكتب الكائن العام الذي تم إنشاؤه بواسطة FormsAuthenticationModule ويحل محله بكائن RolePrincipal أثناء فترة ما بعد الحوادث:http://www.asp.net/learn/security/tutorial-11-vb.aspx

نصائح أخرى

خلاصة القول ، يتمثل الإصلاح السريع في إجراء بدائل هويتك الرئيسية والهوية على معالج application_onpostauthenticateRequest بدلاً من ذلك.

يرجى التحقق من أنك قمت بتنفيذ فصل لواجهة iidentity و iPrincipal ، ثم تستخدم شيئًا مثل الكود التالي لتعيين principal.

    Dim userIdentity As CustomIdentity
    userIdentity = New CustomIdentity(username, True,"forms", sessionId)

    Dim principal As New CustomPrincipal(userIdentity, arrRoles)
    HttpContext.Current.User = principal
    System.Threading.Thread.CurrentPrincipal = principal
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top