Menggunakan fitur jaringan khusus platform

Selesai

Kelas HttpClient menyediakan abstraksi koneksi ke jaringan. Aplikasi yang menggunakan kelas ini bersifat independen dari tumpukan jaringan platform native. Templat .NET MAUI memetakan kelas HttpClient ke kode yang menggunakan tumpukan jaringan asli dari setiap platform. Hal ini memungkinkan aplikasi memanfaatkan fitur pengoptimalan dan konfigurasi jaringan khusus platform. Hal ini sangat penting terutama saat Anda perlu mengonfigurasi aplikasi klien untuk tersambung dengan aman ke layanan web REST.

Dalam unit ini, Anda akan mempelajari cara mengonfigurasi aplikasi klien HTTP untuk menggunakan kemampuan perlindungan jaringan yang disediakan platform yang mendasar.

Mengonfigurasi Keamanan Transportasi Aplikasi di iOS

Keamanan Transportasi Aplikasi (ATS) adalah fitur iOS yang mewajibkan setiap komunikasi jaringan yang dilakukan melalui tumpukan jaringan HTTP native untuk menggunakan TLS 1.2 atau yang lebih tinggi. Algoritma enkripsi modern tidak akan mengungkapkan informasi jika salah satu kunci jangka panjang disusupi.

Jika tidak mematuhi aturan ini, akses jaringan aplikasi Anda akan ditolak. Untuk memperbaiki masalah ini ada dua opsi; Anda bisa mengubah titik akhir untuk mematuhi kebijakan Keamanan Transportasi Aplikasi atau Anda dapat menolak Keamanan Transportasi Aplikasi.

Untuk menolak App Transport Security, tambahkan kunci baru yang dipanggil NSAppTransportSecurity ke file Info.plist . Anda akan menemukan file Info.plist di folder iOS di folder Platform proyek di Penjelajah Solusi. Kunci ini sebenarnya adalah kamus. Tambahkan kunci lain yang disebut NSExceptionDomains ke kamus ini. Kunci ini berisi turunan untuk setiap titik akhir yang ingin Anda targetkan. Setiap titik akhir dapat memiliki konfigurasinya sendiri, yang menentukan fitur mana yang diperbolehkan atau tidak diperbolehkan. Anda bisa menambahkan kunci ini baik menggunakan editor plist generik di Visual Studio, atau dengan membukanya sebagai file 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.

Berikut adalah contoh konfigurasi untuk satu titik akhir yang ditunjukkan sebagai 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>

Contoh ini menambahkan pengecualian ke titik akhir di dotnet.microsoft.com. Jika Anda men-debug layanan secara lokal di komputer pengembangan, Anda dapat memilih keluar dari App Transport Security untuk lalu lintas lokal dengan NSAllowsLocalNetworking kunci sebagai berikut:

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

Terakhir, jika Anda tidak dapat mengidentifikasi semua titik akhir, nonaktifkan Keamanan Transportasi Aplikasi untuk semua titik akhir yang tidak ditentukan menggunakan kunci NSAllowsArbitraryLoads:

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

Ada opsi lain yang dapat Anda tambahkan untuk lebih spesifik tentang cara Anda ingin menolak. Panduan lebih lanjut berada di luar cakupan modul ini.

Mengonfigurasi keamanan Jaringan Android

Seperti iOS, Android memiliki model keamanan yang serupa terkait komunikasi jaringan. Model ini diperkenalkan dengan Android 9 (API level 28). Lalu lintas teks kosong (non-HTTPS) dinonaktifkan secara default saat aplikasi Anda menargetkan Android 9 (API Level 28) atau yang lebih tinggi. Kebijakan ini dapat memengaruhi siklus pengembangan Anda jika aplikasi Anda perlu mengunduh gambar atau file di server yang belum dikonfigurasi untuk HTTPS. Selain itu, Anda mungkin hanya mencoba men-debug aplikasi Anda secara lokal dan tidak ingin menginstal sertifikat pengembangan. Anda mungkin memiliki persyaratan bisnis yang kuat bahwa semua lalu lintas web di semua versi Android selalu HTTPS. Fitur Konfigurasi Keamanan Jaringan Android memungkinkan Anda menyetel keamanan lalu lintas jaringan dengan halus di aplikasi.

Mengizinkan lalu lintas teks kosong

Untuk mengizinkan lalu lintas teks yang jelas, buat file XML baru di folder Sumber Daya/xml bernama network_security_config.xml (Anda mungkin juga perlu membuat folder xml ). Folder Sumber Daya berada di folder platform Android di Penjelajah Solusi. Di dalam file ini, tambahkan elemen network-security-config dengan elemen turunan domain-config. Konfigurasi berikut ini memungkinkan lalu lintas teks yang jelas untuk domain tertentu dan untuk alamat 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>

Anda dapat memperkuat keamanan aplikasi dengan membatasi lalu lintas teks yang jelas di semua versi Android terlepas dari kerangka kerja target. Anda melakukan ini dengan mengatur cleartextTrafficPermitted properti elemen ke domain-configfalse. Pengaturan konfigurasi ini memblokir semua lalu lintas non-HTTPS.

Agar aplikasi mengenali file network_security_config.xml, konfigurasikan properti networkSecurityConfig untuk node application di AndroidManifest.xml yang terletak di folder Properti:

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

Anda dapat menentukan opsi tambahan jika perlu lebih spesifik tentang cara Anda ingin menolak keamanan transportasi.

Men-debug aplikasi secara lokal

Manfaat penting dari membangun aplikasi seluler dengan Visual Studio adalah kemampuan untuk menjalankan dan men-debug aplikasi seluler menggunakan emulator Android atau iOS Simulator. Aplikasi ini dapat menggunakan layanan web ASP.NET Core yang berjalan secara lokal dan diekspos melalui HTTP.

Aplikasi yang berjalan di iOS Simulator dapat tersambung ke layanan web HTTP lokal melalui alamat IP komputer Anda, atau melalui nama host localhost. Aplikasi harus menolak ATS dengan menetapkan minimal NSAllowsLocalNetworking. Misalnya, mengingat layanan web HTTP lokal yang mengekspos operasi melalui URI /api/todoitems/ relatif, aplikasi yang berjalan di Simulator iOS dapat menggunakan operasi dengan mengirim GET permintaan ke http://localhost:<port>/api/todoitems/.GET

Aplikasi yang berjalan di emulator Android dapat tersambung ke layanan web HTTP lokal melalui alamat 10.0.2.2. Alamat ini adalah alias untuk antarmuka loopback host (127.0.0.1 di komputer pengembangan Anda). Konfigurasi keamanan jaringan juga harus disiapkan untuk alamat IP tertentu ini. Misalnya, dengan layanan web HTTP lokal yang mengekspos operasi GET melalui URI relatif /api/todoitems/, aplikasi yang berjalan di emulator Android dapat menggunakan operasi dengan mengirimkan permintaan GET ke http://10.0.2.2:/api/todoitems/.

Catatan

Layanan web ASP.NET Core yang berjalan di bawah pengujian pada host lokal harus menonaktifkan pengalihan HTTPS dengan mengomentari pernyataan app.UseHttpsRedirection(); dalam file Startup.cs.

Mendeteksi sistem operasi

Aplikasi dapat menentukan platform mana yang dijalankannya menggunakan kelas DeviceInfo. Dalam contoh berikut, aplikasi mengatur variabel BaseAddress ke nilai yang berbeda, bergantung apakah data berjalan di 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/";