Thread.CurrentPrincipal تعيين في Application_AuthenticationRequest لم يتم تعيينه لاحقًا في التطبيق
-
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