هل هناك طريقة لتقييد الوصول إلى خدمة ويب ASMX، i.n. الصفحة asmx وWSDL لها؟

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

سؤال

ولدي C # .NET خدمة ويب بأنني في حاجة لتقييد الوصول إليها. أحتاج سبق لي المستهلكين على استخدام اسم المستخدم وكلمة المرور للاتصال الخدمة. ولكن، هل هناك طريقة لتقييد الوصول إلى صفحة asmx الفعلية وWSDL؟ وأود أن الحاجة إلى تقييد الوصول إلى خدمة ويب بواسطة اسم المستخدم / كلمة السر وعنوان IP. إذا كان المستخدم لم يكن لديهم وثائق التفويض الصحيح، لا أريد لهم أن يعرفوا ما موجودة ويب ميثودز في خدمة ويب.

ويمكن أن يتم هذا على الرغم من IIS؟ وأنا أعلم أنني يمكن أن تحد من عناوين IP من خلال IIS، ولكن يمكنني أيضا استخدام أسماء المستخدمين / كلمات السر؟

هل هناك أي طريقة أخرى للقيام بذلك خارج IIS، ربما باستخدام C # .NET؟

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

المحلول

حسنا، لأنه ASMX لديك كامل كومة ASP.NET وقت التشغيل تحت تصرفكم.

الخطوة رقم 1 - إدارة الموارد من خلال .config

وتطبيق علامة <location> للموارد التي تريد تأمين. على افتراض انها ملف ASMX واحد يمكنك ببساطة القيام بما يلي في الملف web.config الخاص بك:

<location path="MyWebService.asmx">
    <system.web>
        <!-- resource specific options will go here -->
    </system.web>
</location>

الخطوة # 2 - مصادقة المستخدمين

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

إذا كنت على إنترانت وتستخدم مصادقة Windows أود أن أقترح غاية الاستفادة من ذلك لانها حقا أبسط خيار للحصول على الإعداد. ومع ذلك، إذا كان يتم الوصول إلى الخدمات عبر الإنترنت ثم يندوز authenticatio ليست في الحقيقة خيارا وعليك أن تختار من معيار الويب. أبسط من تلك هي الأساسية مصادقة ، ولكن يجب أن <م> فقط استخدام هذا خلال SSL منذ لا يتم تشفير اسم المستخدم / كلمة السر (base64 في ترميز فقط). الخطوة التالية حتى من ذلك هو href="http://en.wikipedia.org/wiki/Digest_access_authentication" مصادقة تلخيصية التي لا تتطلب SSL لأن اسم المستخدم / كلمة السر هي أرسلت باستخدام تجزئة MD5. في نهاية المطاف يمكن أن تذهب مع SSL V3 حيث تقوم بإصدار شهادة عميل محددة لكل مستخدم الخاص بك API.

والآن، الخيار الذي حدد للأمن يملي ماذا يجب القيام به. إذا اخترت أمان Windows، فإنه من السهل كما اضاف العنصر التالي إلى العنصر <system.web> بدأنا في الخطوة رقم 1:

<authentication mode="Windows" />

وما تبقى من البروتوكولات الأمنية تسير إلى تتطلب المزيد من العمل قليلا. ASP.NET لا توفر الدعم الجوهري للتعليم الأساسي، دايجست أو V3 SSL. من الناحية الفنية يمكنك الاستفادة IIS على القيام بهذا النوع من التوثيق بالنسبة لك، لكنه سيحتاج دائما لتعيين مستخدم Windows. إذا كان هذا خيار بالنسبة لك، ثم ببساطة ترك العنصر <authentication mode="Windows" /> وتكوين IIS وفقا لذلك. إذا، ومع ذلك، وهذا ليس خيارا، إما لأنك ببساطة لا تسيطر على IIS / أكتيف ديريكتوري أو تحتاج إلى مصادقة مقابل قاعدة بيانات مستخدم مخصصة، فإن ذلك يعني أنك في حاجة لعقف مخصص HttpModule لتوفير الدعم لهذه الأمنية البروتوكولات.

الخطوة # 3 - تأمين الموارد

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

<authorization>
    <deny users="?" />
</authorization>

إذا أردت السماح فقط <م> معين المستخدمين هل يمكن أن تتغير إلى القيام بما يلي بدلا من ذلك:

<authorization>
    <deny users="*" />
    <allow users="jdoe, msmith" />
</authorization>

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

<authorization>
    <deny users="*" />
    <allow roles="My Service Users" />
</authorization>

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

نصائح أخرى

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

في كلتا الحالتين، خدمة الويب الخاص بك لن يكون قادرا على التحدث مع مختلف "الأشياء" ASP.NET مثل كائن التطبيق (وأيضا وسوف، ولكن ذلك لن يكون نفس واحدة). نشر هو فقط أصعب قليلا: نشر نفس الثنائيات، ولكنها تشمل فقط ملف خدمة الويب واحد

ويمكنك المصادقة باستخدام HttpModule. SSL + BasicAuthentication ينبغي أن تسفر أفضل إمكانية التشغيل المتداخل مع سلاسل أداة أخرى.

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

إضافة <add path="*.asmx" verb="*" type="System.Web.HttpForbiddenHandler" validate="True" /> إلى قسم <httpHandlers> من ملف web.config

وأنا لا أعرف كيف عملي وهذا هو لك، ولكن هل يمكن الترقية إلى WCF. WCF بشكل كامل متوافق مع خدمات ويب ASMX، ويتيح لك التحكم أم لا يتعرض WSDL من خلال تحديد نقطة نهاية MEX (تبادل الفوقية). لا MEX نقطة النهاية، لا WSDL.

ويمكنك إيقاف WSDL التي تظهر عن طريق إزالة بروتوكول الوثائق من عنصر في Machine.config

تحديث: الويب التوثيق - أفضل الممارسات إذا كان المستخدمون لديها أسماء المستخدمين / كلمات السر يمكنك استخدام HTTP المصادقة الأساسية عبر HTTPS.

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

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