تمكين FormsAuthentication لالمجلدات الفرعية المتعددة في موقع

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

  •  03-07-2019
  •  | 
  •  

سؤال

ونحن نحاول تنفيذ formsAuthentication على موقعنا، ولكن في السيناريو الذي لم نكن قادرين على إيجاد حل لبعد - من إنشاء HttpModule الخاصة بنا والقيام منطق العرف أنفسنا - حتى ظننت أنني ' د إرم السؤال هناك لمعرفة ما إذا كان هذا الواقع هو الحل الوحيد.

ونحن نرغب في استخدام formsAuthentication على رأس مقدمي العضوية العرف، ولكن أود أن استخدام موفر مختلفة لمجلدات مختلفة. موقعنا تقسيم هذه الأقسام مع المجلدات الفرعية (على سبيل المثال: ~ / مسؤول، ~ / GoldCustomer، ~ / SilverCustomer، ~ / BronzeCustomer)، لذلك نحن نرغب في استخدام موفري العضوية مختلف لكل قسم / فرعي. باستخدام إطار لدعم هذا، كنا تنفيذ الملف web.config لدينا مثل:

<configuration xmlns="http://schemas.microsoft.com/.NetConfiguration/v2.0">
<location path="Admin">
<system.web>
  <authentication mode="Forms">
    <forms name="AdminAuth" loginUrl="~/AdminLogin.aspx" />
  </authentication>
  <membership defaultProvider="AdminProvider" >
    <providers >
      <add connectionStringName="ConnString" name="AdminProvider" type="Assembly.AdminMembershipProvider" ... />
    </providers>
  </membership>
</system.web>
</location>
<location path="GoldCustomer">
  <system.web>
  <authentication mode="Forms">
    <forms name="GoldCustomerAuth" loginUrl="~/GoldCustomerLogin.aspx" />
  </authentication>
  <membership defaultProvider="GoldCustomerProvider" >
    <providers >
      <add connectionStringName="ConnString" name="GoldCustomerProvider" type="Assembly.GoldCustomerMembershipProvider" ...="" />
    </providers>
  </membership>
</system.web>
</location>
<system.web>
  <compilation debug="true" />
  <authentication mode="Forms" />
</system.web>
</configuration>

والقيام بذلك على الرغم من النتائج في خطأ وقت التشغيل:

ومن خطأ لاستخدام قسم المسجلة كما allowDefinition = 'MachineToApplication' خارج مستوى التطبيق. يمكن أن يكون سبب هذا الخطأ دليل ظاهري لم يتم تكوين كتطبيق في IIS.

Line 11:   <location path="Admin">
Line 12:     <system.web>
Line 13:       <authentication mode="Forms">
Line 14:         <forms name="FormsAdmin" loginUrl="~/login.aspx" />
Line 15:       </authentication>

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

وشكرا لمساعدتكم!

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

المحلول

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

ويمكن أن يكون الحل البديل بوابة أشكال الدخول التي تعيد توجيه المستخدم إلى المجلد نموذج تسجيل دخول محدد على أساس ReturnUrl سلسلة استعلام مواقع المعلومات المتغير وسوف أن شكل استخدام مزود انها تريد التحقق من صحة المستخدم. ثم أنه يستخدم FormsAuthentication.RedirectFromLoginPage لوضع تعريف الارتباط المصادقة وإعادة توجيه إلى الصفحة السابقة. يمكنك تعيين الأدوار واستخدام الأمان المستند إلى الدور للتحكم في الوصول إلى كل مجلد مع العلامة <authorization> في web.config.

نصائح أخرى

ولست متأكدا ما كنت تحاول القيام به ولكن ماذا عن الأدوار لكل من هذه الأنواع العملاء؟ الحد من وصول دورا لكل مجلد فرعي ولكن كنت لا تزال لديها 1 موفر العضوية و1 موفر الدور.

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