Använda plattformsspecifika nätverksfunktioner
Klassen HttpClient innehåller en abstraktion av anslutningen till nätverket. En app som använder den här klassen är oberoende av den interna plattformsnätverksstacken. .NET MAUI-mallarna mappar klassen HttpClient till kod som använder den interna nätverksstacken för varje plattform. På så sätt kan ett program dra nytta av plattformsspecifika nätverkskonfigurations- och optimeringsfunktioner. Detta är särskilt viktigt när du behöver konfigurera ett klientprogram för att ansluta säkert till en REST-webbtjänst.
I den här lektionen får du lära dig hur du konfigurerar ett HTTP-klientprogram för att använda de nätverksskyddsfunktioner som den underliggande plattformen tillhandahåller.
Konfigurera App Transport Security på iOS
App Transport Security (ATS) är en iOS-funktion som kräver att varje nätverkskommunikation som görs via den interna HTTP-nätverksstacken använder TLS 1.2 eller senare. Moderna krypteringsalgoritmer avslöjar inte information om en av de långsiktiga nycklarna komprometteras.
Om appen inte följer dessa regler nekas den nätverksåtkomst. För att åtgärda det här problemet har du två alternativ. du kan ändra slutpunkten så att den följer policyn för apptransportsäkerhet eller så kan du avregistrera dig från App Transport Security.
Om du vill välja bort App Transport Security lägger du till en ny nyckel som heter NSAppTransportSecurity
i filen Info.plist . Du hittar filen Info.plist i iOS-mappen i projektets mappen Plattformar i Solution Explorer. Den här nyckeln är faktiskt en ordlista. Lägg till en annan nyckel som heter NSExceptionDomains
i den här ordlistan. Den här nyckeln innehåller ett underordnat objekt för var och en av de slutpunkter som du vill rikta in dig på. Varje slutpunkt kan ha en egen konfiguration och ange vilka funktioner som ska tillåtas eller inte tillåtas. Du kan lägga till den här nyckeln antingen med hjälp av den allmänna plistredigeraren i Visual Studio eller genom att öppna den som en XML-fil.
Här är en exempelkonfiguration för en slutpunkt som visas som 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>
Det här exemplet lägger till ett undantag till slutpunkten vid dotnet.microsoft.com. Om du felsöker en tjänst lokalt på utvecklingsdatorn kan du välja bort App Transport Security för lokal trafik med NSAllowsLocalNetworking
nyckeln på följande sätt:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsLocalNetworking</key>
<true/>
</dict>
Om du inte kan identifiera alla dina slutpunkter inaktiverar du App Transport Security för alla ospecificerade slutpunkter med hjälp NSAllowsArbitraryLoads
av nyckeln:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Det finns andra alternativ som du kan lägga till för att vara mer specifika om hur du vill avregistrera dig. Ytterligare vägledning ligger utanför omfånget för den här modulen.
Konfigurera Android Network-säkerhet
Precis som iOS har Android en liknande säkerhetsmodell kring nätverkskommunikation. Den här modellen introducerades med Android 9 (API-nivå 28). Rensa texttrafik (icke-HTTPS) är inaktiverad som standard när ditt program riktar in sig på Android 9 (API-nivå 28) eller senare. Den här principen kan påverka din utvecklingscykel om din app behöver ladda ned en bild eller fil på en server som inte har konfigurerats för HTTPS. Dessutom kanske du bara försöker felsöka ditt program lokalt och inte vill installera utvecklingscertifikat. Du kan ha starka affärskrav på att all webbtrafik på alla versioner av Android alltid är HTTPS. Med funktionen Konfiguration av nätverkssäkerhet i Android kan du finjustera nätverkstrafiksäkerheten i en app.
Tillåt klartexttrafik
Om du vill tillåta clear text-trafik skapar du en ny XML-fil i mappen Resources/xml med namnet network_security_config.xml (Du kan också behöva skapa xml-mappen ). Mappen Resurser finns i androidplattformsmappen i Solution Explorer. I den här filen lägger du till ett network-security-config
element med ett domain-config
underordnat element. Följande konfiguration möjliggör clear text-trafik för en specifik domän och för en IP-adress:
<?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>
Du kan stärka din apps säkerhet genom att begränsa clear text-trafik på alla versioner av Android oavsett målramverk. Du gör detta genom att ange cleartextTrafficPermitted
egenskapen för elementet domain-config
till false
. Den här konfigurationsinställningen blockerar all icke-HTTPS-trafik.
För att appen ska känna igen network_security_config.xml-filen konfigurerar du egenskapen för networkSecurityConfig
noden i AndroidManifest.xmlapplication
som finns i mappen Egenskaper:
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<application android:networkSecurityConfig="@xml/network_security_config" ...></application>
</manifest>
Du kan ange ytterligare alternativ om du behöver vara mer specifik om hur du vill avregistrera dig från transportsäkerheten.
Felsöka appar lokalt
En viktig fördel med att skapa mobila program med Visual Studio är möjligheten att köra och felsöka mobila program med iOS-simulatorn eller Android-emulatorn. Dessa appar kan använda ASP.NET Core-webbtjänster som körs lokalt och exponeras via HTTP.
Program som körs i iOS-simulatorn kan ansluta till lokala HTTP-webbtjänster med hjälp av datorns IP-adress eller via värdnamnet localhost . Programmet måste avregistrera sig från ATS och ange ett minimum av NSAllowsLocalNetworking
. Med en lokal HTTP-webbtjänst som exponerar en GET
åtgärd via den relativa URI:n /api/todoitems/ kan ett program som körs i iOS-simulatorn använda åtgärden genom att skicka en GET
begäran till http://localhost:<port>/api/todoitems/.
Program som körs i Android-emulatorn kan ansluta till lokala HTTP-webbtjänster via adressen 10.0.2.2. Den här adressen är ett alias för värdloopback-gränssnittet (127.0.0.1 på utvecklingsdatorn). En nätverkssäkerhetskonfiguration måste också konfigureras för den här specifika IP-adressen. Med en lokal HTTP-webbtjänst som exponerar en GET
åtgärd via den relativa URI: n /api/todoitems/ kan ett program som körs i Android-emulatorn använda åtgärden genom att skicka en GET
begäran till http://10.0.2.2:/api/todoitems/.
Kommentar
ASP.NET Core-webbtjänster som körs under test på den lokala värden måste inaktivera HTTPS-omdirigeringar genom att kommentera ut -instruktionen app.UseHttpsRedirection();
i Startup.cs-filen.
Identifiera operativsystemet
En app kan avgöra på vilken plattform den DeviceInfo
körs med hjälp av klassen. I följande exempel anger programmet baseaddress-variabeln till ett annat värde, beroende på om den körs på 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/";