كيف يمكنك تمرير المصادقة الدورة بين التطبيق المجالات

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

سؤال

دعونا نقول أن لديك مواقع www.xyz.com و www.abc.com.

يتيح القول أن يذهب المستخدم إلى www.abc.com وأنها تحصل على مصادقة من خلال طبيعي ASP .صافي عضوية مقدم.

ثم من هذا الموقع يرسلون الى (توجيه ربط ما يعمل) الموقع www.xyz.com و القصد من الموقع www.abc.com كان لتمرير هذا المستخدم إلى موقع آخر كما وضع isAuthenticated ، بحيث الموقع www.xyz.com لا يطلب تفويض من قال المستخدم مرة أخرى.

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

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

المحلول

حاول استخدام FormAuthentication من خلال وضع شبكة الإنترنت.التكوين مصادقة قسم مثل ذلك:

<authentication mode="Forms">
  <forms name=".ASPXAUTH" requireSSL="true" 
      protection="All" 
      enableCrossAppRedirects="true" />
</authentication>

إنشاء آلة الرئيسية.على سبيل المثال: أسهل طريقة لتوليد MachineKey – نصائح وحيل:ASP.NET IIS ...

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

.aspx:

<form id="form1" runat="server">
  <div>
    <p><asp:Button ID="btnTransfer" runat="server" Text="Go" PostBackUrl="http://otherapp/" /></p>
    <input id="hdnStreetCred" runat="server" type="hidden" />
  </div>
</form>

التعليمات البرمجية-خلف:

protected void Page_Load(object sender, EventArgs e)
{
    FormsIdentity cIdentity = Page.User.Identity as FormsIdentity;
    if (cIdentity != null)
    {
        this.hdnStreetCred.ID = FormsAuthentication.FormsCookieName;
        this.hdnStreetCred.Value = FormsAuthentication.Encrypt(((FormsIdentity)User.Identity).Ticket);
    }
}

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

نصائح أخرى

إذا كنت تستخدم المدمج في نظام العضوية يمكنك القيام به عبر المجال الفرعي المصادقة مع أشكال المصادقة باستخدام بعض مثل هذا في كل شبكة.config.

<authentication mode="Forms">
    <forms name=".ASPXAUTH" loginUrl="~/Login.aspx" path="/" 
                  protection="All" 
                  domain="datasharp.co.uk" 
                  enableCrossAppRedirects="true" />

</authentication>

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

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

لست متأكدا ما كنت تستخدم ل .صافي ولكن عادة كنت استخدم أعطها في مصباح المكدس.

القرار يعتمد على نوع التطبيق و البيئة التي كان يعمل.E. g.على الشبكة الداخلية مع NT يمكنك استخدام NTLM إلى تمرير بيانات اعتماد windows مباشرة إلى خوادم في الإنترانت محيط دون أي حاجة إلى تكرار الجلسات.

نهج كيفية القيام بذلك عموما هو اسمه single sign-on (انظر ويكيبيديا).

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

  1. شراء التجارية SSO المنتج (مثل SiteMinder أو PingIdentity)
  2. استخدام MicroSoft عبر المجال SSO الحل ، ودعا ADFS - نشط Direcctory خدمات الاتحاد.(الاتحاد هو عبارة عن تنسيق سلوك مجالات متعددة)

لقد استخدمت SiteMinder وأنه يعمل بشكل جيد ، لكنها باهظة الثمن.إذا كنت في بيئة MicroSoft أعتقد ADFS هو أفضل رهان.تبدأ مع هذا ADFS whitepaper.

أود أن المستخدم شيئا مثل CAS:

[1]: http://www.ja-sig.org/products/cas/ CAS

هذا هو حل المشكلة و لا ننصح المتداول الخاصة بك.

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

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

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

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