سؤال

وأنا أعمل على موقع على شبكة الانترنت مع الداخلية وقسم خارجي.

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

مثال (في بلدي الملف web.config الرئيسي):

<authentication mode="Forms">
    <forms loginUrl="~/Pages/Internal/Main.aspx" defaultUrl="~/Pages/Internal/Main.aspx" cookieless="UseDeviceProfile" name=".ApplicationAuthenticatedUser" path="/" protection="All" slidingExpiration="true" timeout="45"/>
</authentication>

وفي فرعي خارجي، وأنا أحاول الكتابة فوق الإعدادات:

<authentication mode="Forms">
    <forms loginUrl="~/Pages/External/Default.aspx" defaultUrl="~/Pages/External/Default.aspx" cookieless="UseDeviceProfile" name=".ApplicationAuthenticatedUser" path="/Pages/External" protection="All" slidingExpiration="true" timeout="45"/>
</authentication>

ولكن هذا يعطيني خطأ.

وحاولت وضع كل منهم في المجلدات الفرعية ولكن يمكنني الحصول على نفس الخطأ، يجب تعيين مقطع التكوين المصادقة على مستوى التطبيق (انا التخمين وهذا يعني ان الملف web.config الجذر).


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

وسيكون العمل، ولكن إذا كان من الممكن أود الحل أين يمكنني تكوين هذا في الملف web.config.

والشكر

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

المحلول

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

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

إذا كنت بحاجة إلى مصادقة ضد متجرين، يمكنك أن تفعل ذلك مع مقدم الطلب. نموذج تسجيل الدخول ASP.NET يسمح لمقدمي الطلب وأنه من السهل جدا لبناء واحد: http://msdn.microsoft.com/en-us/library/f1kyba5e. ASPX http://msdn.microsoft.com/en-us/library/aa479048. ASPX

والآن، إذا كان يجب إعادة توجيه إلى صفحات مختلفة (كنت عالقة في هذا النموذج لسبب ما؟)، ربما يمكنك القيام بذلك عن طريق عنوان IP. ومن المرجح أن تستخدم ذلك الشبكة الداخلية 10 نقطة أو 192 نقطة نظام IP. إذا كان الأمر كذلك، والحصول على نقلها إلى هذه العناوين الداخلية. الباقي الخارجية. وهذا يتطلب منك وضع شيء أن يفعل إعادة التوجيه. وأنا أعلم أنك تستطيع أن تفعل ذلك في صفحة تسجيل الدخول، إن لم يكن مع معالج HTTP.

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

نصائح أخرى

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

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

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

وإذا كان موقعك الخاص بك هو تطبيق ويب واحد، ربما يمكن استخدام نموذج مزود ASP.NET دور في ذلك، وجود اثنين من أدوار، واحدة للداخلية واحدة للصفحات الخارجية (يمكنك تكوين تلك العلاقات العامة. مجلد مع < موقع> عنصر التكوين).

لمزيد من المعلومات، انظر http://msdn.microsoft.com/ أون لنا / مكتبة / 9ab2fxh0.aspx

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

وربما لا يكون الحل الأكثر أناقة، ولكن بسيطا بما فيه الكفاية:

    Public Sub btnSubmit_Click(ByVal sender As Object, ByVal e As EventArgs)
        If Page.IsValid Then
            Dim userLogin As String = ""

            userLogin = System.Guid.NewGuid.ToString
            FormsAuthentication.RedirectFromLoginPage(userLogin, False)
            ' place a url param throughout my app, only four pages so no 
            ' big problem there in this case g stands for guest           
            Response.Redirect("menu.aspx?m=g", False)

        End If
End Sub

وبعد ذلك، في Global.asax:

    Protected Sub Application_AuthenticateRequest(ByVal sender As Object, ByVal e As System.EventArgs)

        If Not Request.IsAuthenticated And _
(Not Request.RawUrl.ToLower.Contains("guestlogin.aspx")) And _
(Not Request.RawUrl.ToLower.Contains("registeredlogin.aspx")) And _
(Not Request.RawUrl.ToLower.Contains("mobilelogin.aspx")) Then
            Response.Redirect("spLogin.aspx?m=" & Request.QueryString("m"))
        End If

    End Sub

وبعد ذلك، في صفحة تسجيل الدخول الخاصة بك (واحد المحددة في الملف web.config الخاص بك):

        Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
            If Not Page.IsPostBack Then
    if request.querystring("m")="g" then
                    Response.Redirect("guestlogin.aspx?m=g")

    elseif  request.querystring("m")="r" then
                    Response.Redirect("registeredlogin.aspx?m=r")
    elseif  request.querystring("m")="m" then
                    Response.Redirect("mobilelogin.aspx?m=m")

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