سؤال

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

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

لقد وضعت ما يلي في web.config لتطبيقات الجذر:

<location path="ccnet">
  <system.web>
    <authentication mode="Forms">
        <forms loginUrl="/default.aspx" timeout="5000"/>
    </authentication>
    <authorization>
      <allow users="?"/>
      <deny users="?"/>
    </authorization>        
  </system.web>    
</location>

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

لدي شعور بأن علامتي <allow> و<deny> قد تم تعيينهما بشكل خاطئ.يمكن للشخص توضيح؟

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

المحلول

قد تحتاج أيضًا إلى وضع المسار = "/" في علامة (علامات) <النماذج على ما أعتقد.آسف، لقد مر وقت طويل منذ أن فعلت هذا

نصائح أخرى

قد تحتاج أيضًا إلى وضع المسار = "/" في ملف

هذا كان هو!

لذا، ملخص، من أجل القيام بذلك؛

في الجذر web.config أضف:

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />

يجب أن يتم ذلك لأنه افتراضيًا يكون "AutoGenerate,IsolateApps".

ثانيًا، يجب عليك تسمية ملف تعريف الارتباط Auth الخاص بالنموذج بنفس الاسم في كليهما، وقد قمت بذلك كله في الجذر الخاص بي، باستخدام علامة الموقع:

<authentication mode="Forms">
   <forms name="ccAuth" loginUrl="/default.aspx"  path="/" timeout="5000"/>
</authentication>
<authorization>
   <deny users="?"/>
</authorization>

أخيراً:

<location path="ccnet">
  <system.web>
    <authentication mode="Forms">
      <forms name="ccAuth" loginUrl="/default.aspx"  path="/" timeout="5000"/>
    </authentication>
    <authorization>
      <deny users="?"/>
    </authorization>      
  </system.web>    
</location>

شكرا للجميع لمساعدتكم.كان هذا عثرة.

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

أولاً، قم بتعيين "اسم" مصادقة النماذج بنفس الطريقة على جميع التطبيقات.ويتم ذلك مع:

<authentication mode="Forms">  
    <forms name="{name}" path="/" ...>
</authentication>

قم بتعيين "الاسم" ليكون هو نفسه في كلا التطبيقين web.configs.

ثانيًا، عليك إخبار كلا التطبيقين باستخدام نفس المفتاح عند التشفير.هذا هو مربكا بعض الشيء.عندما كنت أقوم بإعداد هذا، كل ما كان علي فعله هو إضافة ما يلي إلى كل من web.configs:

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1" />

وفقًا للمستندات، هذه هي القيمة الافتراضية، لكنها لم تنجح معي إلا إذا قمت بتحديدها.

هذا لا يعمل، فهو لا يزال يسمح لجميع المستخدمين (سواء كانوا مصادقين أم لا) بالوصول.

أعتقد أنه يمكنك حذف علامة السماح، لأنها زائدة عن الحاجة.فقط:

<deny users="?"/>

أين يجلس هذا الرمز جوناثان؟في تجربتي، لدي تحكم في تسجيل الدخول وفي حدث OnAuthenticate سأقوم بتعيين Authenticated على false...

If CustomAuthenticate(Login1.UserName, Login1.Password) Then
    FormsAuthentication.RedirectFromLoginPage(Login1.UserName, False)
Else
    e.Authenticated = False
End If

ولكن هذا باستخدام طريقة مايكروسوفت

أنت تسمح بكل شيء غير مصادق عليه.ربما كنت تبحث عن شيء من هذا القبيل

<deny users="?"/>

ما هو امتداد الملف لتطبيق التحكم في السرعة هذا؟إذا لم يكن نوع الملف الذي تم تسجيل ASP.NET للتعامل معه (على سبيل المثال.jsp، java، إلخ)، فلن يعمل ASP.NET كآلية مصادقة (في IIS 5 و6).على سبيل المثال، بالنسبة لملفات html الثابتة، ما لم يتم تنفيذ تعيين أحرف البدل، يقوم IIS بكل المصادقة والترخيص ويقدم الملف دون الحاجة إلى تضمين ملحق ASP.NET isapi.يمكن لـ IIS7 استخدام وضع خط الأنابيب المتكامل الجديد لاعتراض كافة الطلبات.بالنسبة لـ IIS6، ستحتاج إلى إلقاء نظرة على مقال سكوت جو حول هذا الموضوع.

لم ينجح أي من الاقتراحات المذكورة أعلاه بالنسبة لي.يظهر في مجموعة web.config الجذرية:

<forms loginUrl="/pages/login.aspx" enableCrossAppRedirects="true"...

وتأكد من وجود كل من تطبيق الجذر والتطبيق الفرعي في system.web

<machineKey validationKey="AutoGenerate" decryptionKey="AutoGenerate" validation="SHA1"/>

الذي يقوم بإيقاف تشغيل IsolateApps الافتراضي.

ثم كل شيء يعمل للتو!

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