Platformspecifieke netwerkfuncties gebruiken
De HttpClient-klasse biedt een abstractie van de verbinding met het netwerk. Een app die gebruikmaakt van deze klasse is onafhankelijk van de systeemeigen platformnetwerkstack. De .NET MAUI-sjablonen wijzen de HttpClient-klasse toe aan code die gebruikmaakt van de systeemeigen netwerkstack van elk platform. Hierdoor kan een toepassing profiteren van platformspecifieke netwerkconfiguratie- en optimalisatiefuncties. Dit is met name belangrijk wanneer u een clienttoepassing moet configureren om veilig verbinding te maken met een REST-webservice.
In deze les leert u hoe u een HTTP-clienttoepassing configureert voor het gebruik van de netwerkbeveiligingsmogelijkheden die het onderliggende platform biedt.
App Transport Security configureren in iOS
App Transport Security (ATS) is een iOS-functie die elke netwerkcommunicatie via de systeemeigen HTTP-netwerkstack vereist voor het gebruik van TLS 1.2 of hoger. Moderne versleutelingsalgoritmen geven geen informatie vrij als een van de sleutels op lange termijn wordt aangetast.
Als uw app niet aan deze regels voldoet, wordt de netwerktoegang geweigerd. U kunt dit probleem oplossen door twee opties te kiezen. u kunt uw eindpunt wijzigen om te voldoen aan het App Transport Security-beleid of u kunt zich afmelden voor App Transport Security.
Als u zich wilt afmelden voor App Transport Security, voegt u een nieuwe sleutel toe die wordt aangeroepen NSAppTransportSecurity
aan het Bestand Info.plist . U vindt het bestand Info.plist in de iOS-map in de map Platforms van het project in Solution Explorer. Deze sleutel is eigenlijk een woordenlijst. Voeg nog een sleutel toe die aan deze woordenlijst wordt aangeroepen NSExceptionDomains
. Deze sleutel bevat een onderliggend element voor elk van de eindpunten waarop u zich wilt richten. Elk eindpunt kan een eigen configuratie hebben, waarmee wordt opgegeven welke functies moeten worden toegestaan of niet worden toegestaan. U kunt deze sleutel toevoegen met behulp van de algemene plist-editor in Visual Studio of door deze als een XML-bestand te openen.
Hier volgt een voorbeeldconfiguratie voor één eindpunt dat wordt weergegeven als 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>
In dit voorbeeld wordt een uitzondering toegevoegd aan het eindpunt op dotnet.microsoft.com. Als u lokaal fouten in een service op uw ontwikkelcomputer opspoort, kunt u zich als volgt afmelden voor App Transport Security voor lokaal verkeer met de NSAllowsLocalNetworking
sleutel:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsLocalNetworking</key>
<true/>
</dict>
Als u niet al uw eindpunten kunt identificeren, schakelt u App Transport Security uit voor alle niet-opgegeven eindpunten met behulp van de NSAllowsArbitraryLoads
sleutel:
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
Er zijn andere opties die u kunt toevoegen om specifieker te zijn over hoe u zich wilt afmelden. Verdere richtlijnen vallen buiten het bereik van deze module.
Android-netwerkbeveiliging configureren
Net als iOS heeft Android een vergelijkbaar beveiligingsmodel rond netwerkcommunicatie. Dit model is geïntroduceerd met Android 9 (API-niveau 28). Wissen van tekstverkeer (niet-HTTPS) wordt standaard uitgeschakeld wanneer uw toepassing is gericht op Android 9 (API-niveau 28) of hoger. Dit beleid kan van invloed zijn op uw ontwikkelingscyclus als uw app een afbeelding of bestand moet downloaden op een server die niet is geconfigureerd voor HTTPS. Het is ook mogelijk dat u lokaal probeert fouten in uw toepassing op te sporen en geen ontwikkelingscertificaten wilt installeren. Mogelijk hebt u sterke zakelijke vereisten dat al het webverkeer op alle versies van Android altijd HTTPS is. Met de functie Netwerkbeveiligingsconfiguratie van Android kunt u de beveiliging van netwerkverkeer in een app nauwkeurig afstemmen.
Wissen van tekstverkeer toestaan
Als u tekstverkeer wilt toestaan, maakt u een nieuw XML-bestand in de map Resources/XML met de naam network_security_config.xml (mogelijk moet u ook de XML-map maken). De map Resources bevindt zich in de map Android-platform in Solution Explorer. Voeg in dit bestand een network-security-config
element toe met een domain-config
onderliggend element. Met de volgende configuratie schakelt u tekstverkeer voor een specifiek domein en voor een IP-adres in:
<?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>
U kunt de beveiliging van uw app versterken door duidelijk tekstverkeer op alle versies van Android te beperken, ongeacht het doelframework. U doet dit door de cleartextTrafficPermitted
eigenschap van het domain-config
element in te stellen op false
. Deze configuratie-instelling blokkeert al het niet-HTTPS-verkeer.
Configureer de eigenschap voor het application
knooppunt in de AndroidManifest.xml in de map Eigenschappen om het networkSecurityConfig
network_security_config.xml-bestand te herkennen:
<?xml version="1.0" encoding="utf-8"?>
<manifest>
<application android:networkSecurityConfig="@xml/network_security_config" ...></application>
</manifest>
U kunt aanvullende opties opgeven als u specifieker wilt zijn over hoe u zich wilt afmelden voor transportbeveiliging.
Lokaal fouten opsporen in apps
Een belangrijk voordeel van het bouwen van mobiele toepassingen met Visual Studio is de mogelijkheid om mobiele toepassingen uit te voeren en fouten op te sporen met behulp van de iOS-simulator of Android-emulator. Deze apps kunnen ASP.NET Core-webservices gebruiken die lokaal worden uitgevoerd en beschikbaar worden gesteld via HTTP.
Toepassingen die worden uitgevoerd in de iOS-simulator, kunnen verbinding maken met lokale HTTP-webservices met behulp van het IP-adres van uw computer of via de hostnaam van de localhost . De toepassing moet zich afmelden voor ATS met een minimum van NSAllowsLocalNetworking
. Bijvoorbeeld, op basis van een lokale HTTP-webservice die een GET
bewerking beschikbaar maakt via de relatieve URI /api/todoitems/ , kan een toepassing die wordt uitgevoerd in de iOS-simulator de bewerking gebruiken door een GET
aanvraag te verzenden naar http://localhost:<poort>/api/todoitems/.
Toepassingen die in de Android-emulator worden uitgevoerd, kunnen verbinding maken met lokale HTTP-webservices via het adres 10.0.2.2. Dit adres is een alias voor de host loopback-interface (127.0.0.1 op uw ontwikkelcomputer). Er moet ook een netwerkbeveiligingsconfiguratie worden ingesteld voor dit specifieke IP-adres. Bijvoorbeeld, op basis van een lokale HTTP-webservice die een GET
bewerking beschikbaar maakt via de relatieve URI /api/todoitems/ relatieve URI, kan een toepassing die wordt uitgevoerd in de Android-emulator de bewerking gebruiken door een GET
aanvraag naar te http://10.0.2.2:/api/todoitems/verzenden.
Notitie
ASP.NET Core-webservices die worden uitgevoerd onder test op de lokale host, moeten HTTPS-omleidingen uitschakelen door commentaar te maken van de instructie app.UseHttpsRedirection();
in het Startup.cs bestand.
Het besturingssysteem detecteren
Een app kan bepalen op welk platform het wordt uitgevoerd met behulp van de DeviceInfo
klasse. In het volgende voorbeeld stelt de toepassing de variabele BaseAddress in op een andere waarde, afhankelijk van of deze wordt uitgevoerd op 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/";