Platforma özgü ağ özelliklerini kullanma

Tamamlandı

HttpClient sınıfı, ağ bağlantısının özetini sağlar. Bu sınıfı kullanan bir uygulama, yerel platform ağ yığınından bağımsızdır. .NET MAUI şablonları, HttpClient sınıfını her platformun yerel ağ yığınını kullanan kodla eşler. Bu, bir uygulamanın platforma özgü ağ yapılandırması ve iyileştirme özelliklerinden yararlanmasını sağlar. Bu, özellikle bir istemci uygulamasını bir REST web hizmetine güvenli bir şekilde bağlanacak şekilde yapılandırmanız gerektiğinde önemlidir.

Bu ünitede, temel platformun sağladığı ağ koruma özelliklerini kullanmak için bir HTTP istemci uygulamasını yapılandırmayı öğreneceksiniz.

iOS'ta Uygulama Aktarım Güvenliğini Yapılandırma

Uygulama Aktarım Güvenliği (ATS), yerel HTTP ağ yığını üzerinden yapılan her ağ iletişiminin TLS 1.2 veya üzerini kullanmasını gerektiren bir iOS özelliğidir. Uzun vadeli anahtarlardan biri tehlikeye atılırsa modern şifreleme algoritmaları bilgileri açıklamaz.

Uygulamanız bu kurallara uymazsa ağ erişimi reddedilir. Bu sorunu çözmek için iki seçeneğiniz vardır; Uç noktanızı App Transport Security ilkesine bağlı kalmak üzere değiştirebilir veya App Transport Security'yi geri çevirebilirsiniz.

App Transport Security'yi geri çevirmek için Info.plist dosyasına adlı NSAppTransportSecurity yeni bir anahtar ekleyin. Info.plist dosyasını projenin Çözüm Gezgini'deki Platformlar klasöründeki iOS klasöründe bulabilirsiniz. Bu anahtar aslında bir sözlüktür. Bu sözlüğe adlı NSExceptionDomains başka bir anahtar ekleyin. Bu anahtar, hedeflemek istediğiniz uç noktaların her biri için bir alt öğe içerir. Her uç noktanın kendi yapılandırması olabilir ve hangi özelliklere izin verileceğini veya izin verileceğini belirtebilir. Bu anahtarı Visual Studio'daki genel plist düzenleyicisini kullanarak veya xml dosyası olarak açarak ekleyebilirsiniz.

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.

Aşağıda XML olarak gösterilen bir uç nokta için örnek bir yapılandırma verilmiştır:

<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>

Bu örnek, dotnet.microsoft.comnoktasına bir özel durum ekler. Geliştirme makinenizde yerel olarak bir hizmette hata ayıklaması gerçekleştiriyorsanız, aşağıdaki anahtarla NSAllowsLocalNetworking yerel trafik için App Transport Security'yi devre dışı bırakabilirsiniz:

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

Tüm uç noktalarınızı belirleyemiyorsanız, anahtarı kullanarak belirtilmeyen tüm uç noktalar için Uygulama Aktarım Güvenliği'ni NSAllowsArbitraryLoads devre dışı bırakın:

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

Nasıl geri çevirmek istediğiniz konusunda daha ayrıntılı olmak için ekleyebileceğiniz başka seçenekler de vardır. Diğer yönergeler bu modülün kapsamı dışındadır.

Android Ağ güvenliğini yapılandırma

Android de iOS gibi ağ iletişimi konusunda da benzer bir güvenlik modeline sahiptir. Bu model Android 9 (API düzeyi 28) ile tanıtıldı. Uygulamanız Android 9 (API Düzeyi 28) veya üzerini hedeflediğinde metin temizleme (HTTPS olmayan) trafiği varsayılan olarak devre dışı bırakılır. Uygulamanızın HTTPS için yapılandırılmamış bir sunucuya görüntü veya dosya indirmesi gerekiyorsa bu ilke geliştirme döngünüzü etkileyebilir. Ayrıca, uygulamanızda yerel olarak hata ayıklamaya çalışıyor olabilirsiniz ve geliştirme sertifikalarını yüklemek istemiyor olabilirsiniz. Android'in tüm sürümlerindeki tüm web trafiğinin her zaman HTTPS olması için güçlü iş gereksinimleriniz olabilir. Android'in Ağ Güvenliği Yapılandırması özelliği, bir uygulamada ağ trafiği güvenliğini hassas bir şekilde ayarlamanıza olanak tanır.

Düz metin trafiğine izin ver

Temiz metin trafiğine izin vermek için Resources/xml klasöründe network_security_config.xml adlı yeni bir XML dosyası oluşturun (Xml klasörünü de oluşturmanız gerekebilir). Kaynaklar klasörü, Çözüm Gezgini'daki Android platform klasöründedir. Bu dosyanın içine alt öğe içeren bir domain-config öğe ekleyinnetwork-security-config. Aşağıdaki yapılandırma, belirli bir etki alanı ve IP adresi için net metin trafiğini etkinleştirir:

<?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>

Hedef çerçeveden bağımsız olarak Android'in tüm sürümlerinde düz metin trafiğini kısıtlayarak uygulamanızın güvenliğini güçlendirebilirsiniz. Öğesinin cleartextTrafficPermitted özelliğini domain-configfalseolarak ayarlayarak bunu yaparsınız. Bu yapılandırma ayarı HTTPS olmayan tüm trafiği engeller.

Uygulamanın network_security_config.xml dosyasını tanıması için Özellikler klasöründe bulunan AndroidManifest.xml dosyasındaki düğüm için application özelliğini yapılandırınnetworkSecurityConfig:

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

Aktarım güvenliğini nasıl geri çevirmek istediğiniz konusunda daha ayrıntılı olmanız gerekiyorsa ek seçenekler belirtebilirsiniz.

Yerel olarak uygulamalarda hata ayıklama

Visual Studio ile mobil uygulama oluşturmanın önemli avantajlarından biri, iOS Simülatörü veya Android öykünücüsü kullanarak mobil uygulamaları çalıştırma ve hata ayıklama özelliğidir. Bu uygulamalar, yerel olarak çalışan ve HTTP üzerinden kullanıma sunulan ASP.NET Core web hizmetlerini kullanabilir.

iOS Simülatörü'nde çalışan uygulamalar, makinenizin IP adresini kullanarak veya localhost ana bilgisayar adı aracılığıyla yerel HTTP web hizmetlerine bağlanabilir. Uygulama, en az NSAllowsLocalNetworkingdeğerini belirterek ATS'yi geri çevirmelidir. Örneğin, /api/todoitems/ göreli URI aracılığıyla bir GET işlemi kullanıma sunan yerel bir HTTP web hizmeti verüldüğünde, iOS Simülatöründe çalışan bir uygulama, port>/api/todoitems/ adresine istek GEThttp://localhost:<göndererek işlemi kullanabilir.

Android öykünücüsunda çalışan uygulamalar, 10.0.2.2 adresi aracılığıyla yerel HTTP web hizmetlerine bağlanabilir. Bu adres, ana bilgisayar geri döngü arabirimi (geliştirme makinenizde 127.0.0.1) için bir diğer addır. Bu ip adresi için bir ağ güvenliği yapılandırması da ayarlanmalıdır. Örneğin, /api/todoitems/ göreli URI'sini kullanarak bir GET işlemi kullanıma sunan yerel bir HTTP web hizmeti verüldüğünde, Android öykünücüsunda çalışan bir uygulama adresine http://10.0.2.2:/api/todoitems/istek GET göndererek işlemi kullanabilir.

Dekont

ASP.NET Yerel konakta test altında çalışan Core web hizmetleri, Startup.cs dosyasındaki deyimine app.UseHttpsRedirection(); açıklama ekleyerek HTTPS yeniden yönlendirmelerini devre dışı bırakmalıdır.

İşletim sistemini algılama

Bir uygulama, sınıfını kullanarak DeviceInfo hangi platformda çalıştığını belirleyebilir. Aşağıdaki örnekte uygulama, BaseAddress değişkenini Android'de çalışıp çalışmadığına bağlı olarak farklı bir değere ayarlar:

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