كيفية تحديد ما إذا كانت مكالمة WebService تأتي من الصفحة المعتمدة من النماذج؟

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

سؤال

لدي تطبيق ويب ASP.NET الذي أستخدم فيه العديد من الخدمات لخدمة العديد من طلبات AJAX. المشكلة هي كيفية تحديد ما إذا كانت المكالمة المقابلة تأتي الصفحة التي خدمتها. أستخدم مصادقة النماذج في صفحاتي. هل هناك أي طريقة يمكنني من خلالها السماح للمستخدم بالاتصال بـ Weservice من خلال مصادقة النماذج نفسها.

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

المحلول

سؤال عظيم ، لا شك!

هذا يذكرني سؤال قديم أجبته بالفعل. سيناريوك مختلف ، لكن مشكلة الجذور تظل كما هي: إذا اتصلت بخدمة ويب من نموذج ويب ، كيفية ذلك شارك بيانات المصادقة مع النموذج؟

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

لن تشارك خدمة الويب معلومات حول تسجيل الدخول إلى المستخدم ما لم يتم تمريرها بشكل صريح كطريقة للمعلمة (أي. void PerformAction(string userId, ...)) ، ولكن تذكر أنه في هذه الحالة يتغير المنظور بشكل كبير.

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

أضف] الآن بعد أن أوضحت السيناريو الخاص بك أكثر تفصيلًا ، يأتي هنا الجزء المثير من هندسة البرمجيات :)

كما قلت في تعليقي ، لديك خيارات متعددة ، على سبيل المثال:

  1. تخزين اسم المستخدم/كلمة المرور في ترميز الصفحة (في متغيرات JavaScript) واطلب من jQuery إرسالها كمعلمة لخدمة الويب. سيقوم WS بعد ذلك بمصادقة طلب الطلب على تلك البيانات. غير موصى به لأنه إذا تمكن شخص ما من الوصول إلى ذاكرة التخزين المؤقت للمستخدم ، يتم استغلال كلمة المرور (هناك وسائل أسهل لسرقة كلمة مرور شخص ما على جهاز كمبيوتر مشترك/عام ، فلن مناقشتها) ، وأيضًا لأنه إذا كنت تخطط للتبديل من HTTP العادي إلى HTTPS إلى HTTPS مصادقة آمنة إذن أنت يجب تأمين خدمة الويب أيضًا
  2. اطلب من تطبيق الويب إنشاء مصادقة رمز هذا صحيح لخدمة الويب. تبدو الفكرة مثل هذا: أولاً ، لديك كائن مشترك بين WebApp وخدمة الويب (مثل كائن في الداخل Application مجموعة) أو ، إذا كانت خدمة الويب وخدمة الويب موجودة على خوادم مختلفة ، استخدم DBMS ؛ بعد ذلك ، بالنسبة إلى المصادقة الناجحة لكل WebApp ، قم بإنشاء رمز فريد (يمكن أن يكون معرف الجلسة جيدًا) وتخزينه في متغير JS الذي سيتم تمريره إلى خدمة الويب ؛ أخيرًا ، عندما يتم استدعاء خدمة الويب ، تحقق من هذا الكائن المشترك من أن الرمز المميز صالح (أي. يتم مصادقة المستخدم ولا يزال يسجل الدخول ، بإذن للوصول إلى خدمة الويب هذه ، لذلك المصادقة و تفويض) ، وإلا يرفض

إذا كان لدى اللاعبين الآخرين أفكار ، فلا تتردد في المساعدة ؛)

نصائح أخرى

نظرًا لأنك تقوم بمصادقة المنتديات ، يمكنك القيام بشيء مثل هذا في WebMethod

If Not HttpContext.Current.User.Identity.IsAuthenticated Then
    Return Nothing
End If

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

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