Použití síťových funkcí specifických pro platformu

Dokončeno

Třída HttpClient poskytuje abstrakci připojení k síti. Aplikace, která tuto třídu používá, je nezávislá na zásobníku sítí nativní platformy. Šablony .NET MAUI mapují třídu HttpClient na kód, který využívá nativní síťový zásobník každé platformy. To umožňuje aplikaci využívat funkce konfigurace a optimalizace sítě specifické pro platformu. To je zvlášť důležité, když potřebujete nakonfigurovat klientskou aplikaci, aby se bezpečně připojila k webové službě REST.

V této lekci se dozvíte, jak nakonfigurovat klientskou aplikaci HTTP tak, aby používala možnosti ochrany sítě, které poskytuje základní platforma.

Konfigurace služby App Transport Security v iOSu

App Transport Security (ATS) je funkce iOS, která vyžaduje každou síťovou komunikaci provedenou prostřednictvím nativního zásobníku sítě HTTP pro použití protokolu TLS 1.2 nebo vyšší. Moderní šifrovací algoritmy nezveřejní informace, pokud dojde k ohrožení některého z dlouhodobých klíčů.

Pokud vaše aplikace tato pravidla nevyhovuje, přístup k síti bude odepřen. Chcete-li tento problém vyřešit, máte dvě možnosti; Koncový bod můžete změnit tak, aby dodržoval zásady App Transport Security, nebo se můžete odhlásit ze služby App Transport Security.

Pokud chcete vyjádřit výslovný nesouhlas se službou App Transport Security, přidejte do souboru Info.plist nový klíč NSAppTransportSecurity. Soubor Info.plist najdete ve složce iOS ve složce Platformy projektu v Průzkumník řešení. Tento klíč je ve skutečnosti slovník. Přidejte do tohoto slovníku další klíč NSExceptionDomains . Tento klíč obsahuje podřízenou hodnotu pro každý koncový bod, na který chcete cílit. Každý koncový bod může mít vlastní konfiguraci a určit, které funkce se mají povolit nebo zakázat. Tento klíč můžete přidat buď pomocí obecného editoru plist v sadě Visual Studio, nebo ho otevřete jako soubor 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.

Tady je příklad konfigurace pro jeden koncový bod zobrazený jako 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>

Tento příklad přidá do koncového bodu výjimku v dotnet.microsoft.com. Pokud ladíte službu místně na vývojovém počítači, můžete se odhlásit z App Transport Security pro místní provoz pomocí NSAllowsLocalNetworking následujícího klíče:

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

Pokud nemůžete identifikovat všechny koncové body, pomocí klíče zakažte Službu App Transport Security pro všechny nezadané koncové body NSAllowsArbitraryLoads :

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

Existují další možnosti, které můžete přidat, aby byly konkrétnější o tom, jak chcete vyjádřit výslovný nesouhlas. Další pokyny jsou nad rámec tohoto modulu.

Konfigurace zabezpečení sítě pro Android

Podobně jako iOS má Android podobný model zabezpečení kolem síťové komunikace. Tento model byl představen s Androidem 9 (úroveň rozhraní API 28). Pokud vaše aplikace cílí na Android 9 (úroveň rozhraní API 28) nebo vyšší, je ve výchozím nastavení zakázaný provoz s vymazáním textu (bez HTTPS). Tyto zásady můžou mít vliv na váš vývojový cyklus, pokud vaše aplikace potřebuje stáhnout image nebo soubor na serveru, který není nakonfigurovaný pro HTTPS. Možná se také pokoušíte ladit aplikaci místně a nechcete instalovat vývojové certifikáty. Můžete mít silné obchodní požadavky, že veškerý webový provoz ve všech verzích Androidu je vždy HTTPS. Funkce Konfigurace zabezpečení sítě v Androidu umožňuje jemně vyladit zabezpečení síťového provozu v aplikaci.

Povolení smazat textového provozu

Pokud chcete povolit prostý textový provoz, vytvořte ve složce Resources/xml nový soubor XML s názvem network_security_config.xml (Možná budete muset vytvořit i složku XML). Složka Resources je ve složce platformy Android v Průzkumník řešení. Uvnitř tohoto souboru přidejte network-security-config prvek s podřízeným elementem domain-config . Následující konfigurace umožňuje vymazat textový provoz pro určitou doménu a IP adresu:

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

Zabezpečení aplikace můžete posílit omezením textového provozu ve všech verzích Androidu bez ohledu na cílovou architekturu. Provedete to nastavením cleartextTrafficPermitted vlastnosti elementu domain-config na false. Toto nastavení konfigurace blokuje veškerý provoz mimo HTTPS.

Aby aplikace rozpoznala soubor network_security_config.xml, nakonfigurujte networkSecurityConfig vlastnost application uzlu ve složce Vlastnosti v souboru AndroidManifest.xml:

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

Pokud potřebujete konkrétnější informace o tom, jak chcete vyjádřit nesouhlas se zabezpečením přenosu, můžete zadat další možnosti.

Místní ladění aplikací

Důležitou výhodou vytváření mobilních aplikací pomocí sady Visual Studio je možnost spouštět a ladit mobilní aplikace pomocí simulátoru iOS nebo emulátoru Androidu. Tyto aplikace můžou využívat webové služby ASP.NET Core, které jsou spuštěné místně a vystavené prostřednictvím protokolu HTTP.

Aplikace spuštěné v simulátoru iOS se můžou připojit k místním webovým službám HTTP pomocí IP adresy vašeho počítače nebo pomocí názvu hostitele localhost . Aplikace musí ze služby ATS vyjádřit výslovný nesouhlas s určením minimálně .NSAllowsLocalNetworking Například vzhledem k tomu, že místní webová služba HTTP zveřejňuje operaci prostřednictvím /api/todoitems/ relativního identifikátoru URI, může aplikace spuštěná v simulátoru iOS tuto operaci využívat odesláním GET požadavku na http://localhost:<port>/api/todoitems/.GET

Aplikace spuštěné v emulátoru Androidu se můžou připojit k místním webovým službám HTTP prostřednictvím adresy 10.0.2.2. Tato adresa je alias pro rozhraní zpětné smyčky hostitele (127.0.0.1 na vývojovém počítači). Pro tuto konkrétní IP adresu musí být nastavená také konfigurace zabezpečení sítě. Například vzhledem k tomu, že místní webová služba HTTP, která zveřejňuje GET operaci prostřednictvím /api/todoitems/ relativního identifikátoru URI, může aplikace spuštěná v emulátoru Androidu tuto operaci využívat odesláním GET požadavku na http://10.0.2.2:/api/todoitems/adresu .

Poznámka:

ASP.NET webové služby Core spuštěné v testu na místním hostiteli musí zakázat přesměrování HTTPS zakomentováním příkazu app.UseHttpsRedirection(); v souboru Startup.cs .

Zjištění operačního systému

Aplikace může určit, na které platformě běží, pomocí DeviceInfo třídy. V následujícím příkladu aplikace nastaví proměnnou BaseAddress na jinou hodnotu v závislosti na tom, jestli běží na Androidu:

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