سؤال

هل من الممكن مصادقة المستخدمين عبر النطاقات الفرعية عندما تتم المصادقة في مجال فرعي بدلاً من المجال الأصلي؟

على سبيل المثال:

يقوم المستخدم بتسجيل الدخول إلى site1.parent.com، ثم نحتاج إلى إرساله إلى report.parent.com.

هل يمكنني مصادقتها على موقع إعداد التقارير على الرغم من أن تسجيل الدخول قد تم في نطاق فرعي؟

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

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

المحلول

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

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

نصائح أخرى

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

ورمز المصادقة:

System.Web.HttpCookie authcookie = System.Web.Security.FormsAuthentication.GetAuthCookie(UserName, False);
authcookie.Domain = "parent.com";
HttpResponse.AppendCookie(authcookie);
HttpResponse.Redirect(System.Web.Security.FormsAuthentication.GetRedirectUrl(UserName, 
                                                                       False));

وكملاحظة جانبية، وجدت أنه بعد باستخدام طريقة JRO والتي عملت بشكل جيد +1، وهي طريقة FormsAuthenication.SignOut () لم تنجح عند استدعائه من فرعي آخر من شبكة الاتصالات العالمية /. (انا التخمين بسبب عدم تطابق الملكية .Domain) - للالتفاف على هذا كنت:

if (Request.Cookies[FormsAuthentication.FormsCookieName] != null)
            {
                HttpCookie myCookie = new HttpCookie(FormsAuthentication.FormsCookieName);
                myCookie.Domain = "parent.com";
                myCookie.Expires = DateTime.Now.AddDays(-1d);
                Response.Cookies.Add(myCookie);
            }

وبالإضافة إلى وضع ارتباط لمجال الأصل تحتاج أيضا إلى التأكد من أن جميع المواقع (التطبيقات) لديها نفس validationKey وdecryptionKey () بحيث أنهم جميعا ندرك تذكرة المصادقة بعضها البعض وملف تعريف الارتباط. مقالة جيدة جدا هنا http://www.codeproject.com/KB/aspnet/SingleSignon.aspx

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

وفكرة واحدة: كما كنت توجيهها عبر الحدود، ومنحهم لمرة واحدة تمرير رمز ومن ثم نقول للاستقبال دون مجال لنتوقع منهم (هذا المستخدم، من هذا IP، مع هذا المنوال)

والجواب JRO ويعمل بشكل جيد. ولكن تأكد من تحديث الأشكال webconfig المصادقة setting "domain" ، وإلا يشكل تسجيل الخروج المصادقة لا تعمل بشكل صحيح. هنا قضية تسجيل الخروج جئت عبر - من جانب إلى آخر. خداع هنا هو أن تكون هناك '.' كما تم تعيين بادئة كما المجال لملفات تعريف الارتباط ب ".parent.com" (استخدم مفتش الكعكة).

<authentication mode="Forms">          
      <forms cookieless="UseCookies" defaultUrl="~/Default" loginUrl="~/user/signin" domain=".parent.com"  name="FormAuthentication" path="/"/>
    </authentication>

2 أشياء يجب القيام بها:

  1. يجب أن يكون MachineKey هو نفسه في كل web.config (المجال الرئيسي والمجال (المجالات) الفرعي)
  2. يجب أن يكون اسم مجال AuthenticationCookie هو نفسه.

اتبع ال التالي مقال لمزيد من العمق.

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