استخدام ميزات الشبكة لنظام أساسي محدد

مكتمل

توفر فئة HttpClient تجريدا للاتصال بالشبكة. التطبيق الذي يستخدم هذه الفئة مستقل عن مكدس شبكات النظام الأساسي الأصلي. تعين قوالب .NET MAUI فئة HttpClient إلى التعليمات البرمجية التي تستخدم مكدس الشبكات الأصلي لكل نظام أساسي. وهذا يمكن التطبيق من الاستفادة من تكوين الشبكة الخاصة بالنظام الأساسي وميزات التحسين. هذا مهم بشكل خاص عندما تحتاج إلى تكوين تطبيق عميل للاتصال بشكل آمن بخدمة ويب REST.

في هذه الوحدة، ستتعلم كيفية تكوين تطبيق عميل HTTP لاستخدام قدرات حماية الشبكة التي يوفرها النظام الأساسي.

تكوين App Transport Security على iOS

App Transport Security (ATS) هي ميزة iOS تتطلب كل اتصال شبكة يتم إجراؤه من خلال مكدس شبكة HTTP الأصلي لاستخدام TLS 1.2 أو أعلى. لا تكشف خوارزميات التشفير الحديثة عن المعلومات إذا تم اختراق أحد المفاتيح طويلة الأجل.

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

لإلغاء الاشتراك في App Transport Security، أضف مفتاحا جديدا يسمى NSAppTransportSecurity إلى ملف Info.plist . ستجد ملف Info.plist في مجلد iOS في مجلد project's Platforms في مستكشف الحلول. هذا المفتاح هو في الواقع قاموس. أضف مفتاحا آخر يسمى NSExceptionDomains إلى هذا القاموس. يحتوي هذا المفتاح على تابع لكل نقطة من نقاط النهاية التي تريد استهدافها. يمكن أن يكون لكل نقطة نهاية تكوينها الخاص، مع تحديد الميزات التي يجب السماح بها أو عدم السماح بها. يمكنك إضافة هذا المفتاح إما باستخدام محرر plist العام في Visual Studio، أو عن طريق فتحه كملف XML.

Screenshot of left context menu with the open menu item selected. On the right is the window Visual Studio, X M L (text) editor is highlighted.

فيما يلي مثال على التكوين لنقطة نهاية واحدة تظهر ك XML:

<key>NSAppTransportSecurity</key>
<dict>
   <key>NSExceptionDomains</key>
      <dict>
      <key>dotnet.microsoft.com</key>
      <dict>
        <key>NSExceptionMinimumTLSVersion</key>
        <string>TLSv1.0</string>
        <key>NSExceptionAllowsInsecureHTTPLoads</key>
        <true/>
      </dict>
   </dict>
</dict>

يضيف هذا المثال استثناء إلى نقطة النهاية في dotnet.microsoft.com. إذا كنت تقوم بتصحيح خدمة محليا على جهاز التطوير الخاص بك، يمكنك إلغاء الاشتراك في App Transport Security لنسبة NSAllowsLocalNetworking استخدام الشبكة المحلية باستخدام المفتاح كما يلي:

<key>NSAppTransportSecurity</key>    
<dict>
    <key>NSAllowsLocalNetworking</key>
    <true/>
</dict>

إذا لم تتمكن من تحديد جميع نقاط النهاية الخاصة بك، فتعطيل App Transport Security لجميع نقاط النهاية غير المحددة باستخدام NSAllowsArbitraryLoads المفتاح :

<key>NSAppTransportSecurity</key>
<dict>
   <key>NSAllowsArbitraryLoads</key>
   <true/>
</dict>

هناك خيارات أخرى يمكنك إضافتها لتكون أكثر تحديدا حول كيفية إلغاء الاشتراك. توجد إرشادات إضافية خارج نطاق هذه الوحدة النمطية.

تكوين أمان شبكة Android

مثل iOS، يحتوي Android على نموذج أمان مشابه حول اتصال الشبكة. تم تقديم هذا النموذج مع Android 9 (مستوى واجهة برمجة التطبيقات 28). يتم تعطيل حركة مرور النص الواضح (غير HTTPS) بشكل افتراضي عندما يستهدف تطبيقك Android 9 (API Level 28) أو أعلى. قد يؤثر هذا النهج على دورة التطوير إذا كان تطبيقك بحاجة إلى تنزيل صورة أو ملف على خادم لم يتم تكوينه ل HTTPS. أيضا، قد تحاول فقط تصحيح تطبيقك محليا ولا تريد تثبيت شهادات التطوير. قد يكون لديك متطلبات عمل قوية أن جميع حركة مرور الويب على جميع إصدارات Android هي دائما HTTPS. تسمح لك ميزة تكوين أمان الشبكة في Android بضبط أمان حركة مرور الشبكة بدقة في أحد التطبيقات.

السماح بمسح حركة مرور النص

للسماح بمسح حركة مرور النص، قم بإنشاء ملف XML جديد في مجلد Resources/xml المسمى network_security_config.xml (قد تحتاج أيضا إلى إنشاء مجلد xml ). مجلد الموارد موجود في مجلد النظام الأساسي ل Android في مستكشف الحلول. داخل هذا الملف، أضف عنصرا network-security-config مع عنصر تابع domain-config . يتيح التكوين التالي مسح حركة مرور النص لمجال معين ولعنوان IP:

<?xml version="1.0" encoding="utf-8"?>
<network-security-config>
  <domain-config cleartextTrafficPermitted="true">
    <domain includeSubdomains="true">10.0.2.2</domain> <!-- Debug port -->
    <domain includeSubdomains="true">microsoft.com</domain>
  </domain-config>
</network-security-config>

يمكنك تعزيز أمان تطبيقك عن طريق تقييد حركة مرور النص الواضحة على جميع إصدارات Android بغض النظر عن إطار العمل الهدف. يمكنك القيام بذلك عن طريق تعيين cleartextTrafficPermitted خاصية domain-config العنصر إلى false. يمنع إعداد التكوين هذا كافة نسبة استخدام الشبكة غير HTTPS.

لكي يتعرف التطبيق على ملف network_security_config.xml، قم بتكوين networkSecurityConfig الخاصية للعقدة application في AndroidManifest.xml الموجود في مجلد Properties:

<?xml version="1.0" encoding="utf-8"?>
<manifest>
    <application android:networkSecurityConfig="@xml/network_security_config" ...></application>
</manifest>

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

تصحيح أخطاء التطبيقات محليا

تتمثل إحدى المزايا المهمة لبناء تطبيقات الأجهزة المحمولة باستخدام Visual Studio في القدرة على تشغيل تطبيقات الجوال وتصحيحها باستخدام محاكي iOS أو محاكي Android. يمكن أن تستهلك هذه التطبيقات ASP.NET خدمات الويب الأساسية التي تعمل محليا ومكشوفة عبر HTTP.

يمكن للتطبيقات التي تعمل في iOS Simulator الاتصال بخدمات ويب HTTP المحلية باستخدام عنوان IP الخاص بجهازك، أو عبر اسم مضيف المضيف المحلي . يجب أن يختار التطبيق إلغاء الاشتراك في ATS مع تحديد الحد الأدنى من NSAllowsLocalNetworking. على سبيل المثال، بالنظر إلى خدمة ويب HTTP محلية GET تعرض عملية عبر /api/todoitems/ URI النسبي، يمكن لتطبيق يعمل في iOS Simulator استهلاك العملية عن طريق إرسال GET طلب إلى http://localhost:<المنفذ>/api/todoitems/.

يمكن للتطبيقات التي تعمل في محاكي Android الاتصال بخدمات ويب HTTP المحلية من خلال عنوان 10.0.2.2. هذا العنوان هو اسم مستعار لواجهة رد المضيف (127.0.0.1 على جهاز التطوير الخاص بك). يجب أيضا إعداد تكوين أمان الشبكة لعنوان IP المحدد هذا. على سبيل المثال، بالنظر إلى خدمة ويب HTTP محلية GET تعرض عملية عبر /api/todoitems/ URI النسبي، يمكن لتطبيق يعمل في محاكي Android استهلاك العملية عن طريق إرسال GET طلب إلى http://10.0.2.2:/api/todoitems/.

إشعار

ASP.NET يجب أن تقوم خدمات الويب الأساسية التي يتم تشغيلها تحت الاختبار على المضيف المحلي بتعطيل عمليات إعادة توجيه HTTPS عن طريق التعليق على العبارة app.UseHttpsRedirection();في ملف Startup.cs .

الكشف عن نظام التشغيل

يمكن للتطبيق تحديد النظام الأساسي الذي يعمل عليه باستخدام DeviceInfo الفئة . في المثال التالي، يقوم التطبيق بتعيين متغير BaseAddress إلى قيمة مختلفة، اعتمادا على ما إذا كان يعمل على Android:

public static string BaseAddress = DeviceInfo.Platform == DevicePlatform.Android ? "http://10.0.2.2:5000" : "http://localhost:5000";
public static string TodoItemsUrl = $"{BaseAddress}/api/todoitems/";