Platformspecifikus hálózati funkciók használata

Befejeződött

A HttpClient-osztály absztrakciót biztosít a hálózathoz való csatlakozáshoz. Az osztályt használó alkalmazások függetlenek a natív platform hálózati veremétől. A .NET MAUI-sablonok a HttpClient osztályt olyan kódra képezik le, amely az egyes platformok natív hálózati vermét használja. Ez lehetővé teszi, hogy egy alkalmazás kihasználja a platformspecifikus hálózati konfigurációs és optimalizálási funkciókat. Ez különösen akkor fontos, ha konfigurálnia kell egy ügyfélalkalmazást, hogy biztonságosan csatlakozzon egy REST-webszolgáltatáshoz.

Ebben a leckében megtudhatja, hogyan konfigurálhat HTTP-ügyfélalkalmazásokat a mögöttes platform által biztosított hálózatvédelmi képességek használatára.

Alkalmazásátviteli biztonság konfigurálása iOS rendszeren

Az App Transport Security (ATS) egy iOS-funkció, amely megköveteli a natív HTTP-hálózati veremen keresztül végzett minden hálózati kommunikációt a TLS 1.2 vagy újabb verziójának használatához. A modern titkosítási algoritmusok nem fedik fel az információkat, ha a hosszú távú kulcsok egyikét feltörik.

Ha az alkalmazás nem tartja be ezeket a szabályokat, a rendszer megtagadja a hálózati hozzáférést. A probléma megoldásához két lehetősége van: módosíthatja a végpontot, hogy megfeleljen az App Transport Security szabályzatának, vagy kikapcsolhatja az App Transport Security használatát.

Az App Transport Security letiltásához adjon hozzá egy új kulcsot NSAppTransportSecurity az Info.plist fájlhoz. Az Info.plist fájl az iOS mappában található a Project Platform mappájában Megoldáskezelő. Ez a kulcs valójában egy szótár. Adjon hozzá egy másik, ehhez a szótárhoz hívott NSExceptionDomains kulcsot. Ez a kulcs tartalmazza a megcélzni kívánt végpontok gyermekét. Minden végpont saját konfigurációval rendelkezhet, amely meghatározza, hogy mely funkciókat engedélyezze vagy tiltsa le. Ezt a kulcsot a Visual Studio általános plist szerkesztőjével vagy XML-fájlként megnyitva is hozzáadhatja.

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.

Íme egy példakonfiguráció egy XML-ként megjelenített végponthoz:

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

Ez a példa kivételt ad a végponthoz a dotnet.microsoft.com. Ha helyileg hibakeresést végez a fejlesztési gépen, a következő kulccsal letilthatja az App Transport Security szolgáltatást a NSAllowsLocalNetworking helyi forgalom számára:

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

Ha nem tudja azonosítani az összes végpontot, tiltsa le az App Transport Securityt az összes meghatározatlan végpont esetében a NSAllowsArbitraryLoads kulccsal:

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

További lehetőségeket is hozzáadhat, amelyek részletesebben ismertetik a letiltás módját. A további útmutatás a modul hatókörén kívül esik.

Az Android Network biztonságának konfigurálása

Az iOS-hez hasonlóan az Android is hasonló biztonsági modellel rendelkezik a hálózati kommunikáció körül. Ez a modell androidos 9-es (API 28- szintű) verzióval lett bevezetve. A szövegforgalom törlése (nem HTTPS) alapértelmezés szerint le van tiltva, ha az alkalmazás Android 9 (API Level 28) vagy újabb verziót céloz meg. Ez a szabályzat hatással lehet a fejlesztési ciklusra, ha az alkalmazásnak le kell töltenie egy képet vagy fájlt egy olyan kiszolgálón, amely nincs HTTPS-hez konfigurálva. Emellett előfordulhat, hogy csak helyileg próbál hibakeresést végezni az alkalmazáson, és nem szeretné telepíteni a fejlesztési tanúsítványokat. Előfordulhat, hogy erős üzleti követelményekkel rendelkezik, hogy az Összes webes forgalom az Android minden verziójában mindig HTTPS. Az Android hálózati biztonsági konfigurációs funkciója lehetővé teszi a hálózati forgalom biztonságának finomhangolását egy alkalmazásban.

Szövegforgalom törlésének engedélyezése

A szöveges forgalom törléséhez hozzon létre egy új XML-fájlt a network_security_config.xml nevű Resources/xml mappában (előfordulhat, hogy létre kell hoznia az xml-mappát is). Az Erőforrások mappa a Megoldáskezelő Android platformmappájában található. Ebben a fájlban adjon hozzá egy network-security-config gyermekelemet tartalmazó domain-config elemet. Az alábbi konfiguráció lehetővé teszi egy adott tartomány és egy IP-cím szöveges forgalmának törlését:

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

Az alkalmazás biztonságát úgy erősítheti, hogy a célkerettől függetlenül korlátozza az Android összes verziójában a tiszta szöveges forgalmat. Ezt úgy teheti meg, hogy az cleartextTrafficPermitted elem tulajdonságát a domain-config következőre falseállítja: . Ez a konfigurációs beállítás blokkolja az összes nem HTTPS-forgalmat.

Ahhoz, hogy az alkalmazás felismerje a network_security_config.xml fájlt, konfigurálja a networkSecurityConfigapplication csomópont tulajdonságát a Tulajdonságok mappában található AndroidManifest.xml fájlban:

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

További lehetőségeket is megadhat, ha pontosabban kell tudnia, hogyan szeretné kikapcsolni az átviteli biztonságot.

Alkalmazások helyi hibakeresése

A mobilalkalmazások Visual Studióval való létrehozásának egyik fontos előnye, hogy képes mobilalkalmazásokat futtatni és hibakeresést végezni az iOS-szimulátor vagy az Android emulátor használatával. Ezek az alkalmazások ASP.NET Core-webszolgáltatásokat használhatnak, amelyek helyileg futnak, és HTTP-en keresztül vannak közzétéve.

Az iOS-szimulátorban futó alkalmazások a számítógép IP-címével vagy a localhost gazdagépnévvel csatlakozhatnak a helyi HTTP-webszolgáltatásokhoz. Az alkalmazásnak ki kell választania az ATS-t, és meg kell adnia a NSAllowsLocalNetworkingminimális értéket. Ha például egy helyi HTTP-webszolgáltatás az /api/todoitems/ relatív URI-n keresztül tesz elérhetővé egy GET műveletet, az iOS-szimulátorban futó alkalmazások felhasználhatják a műveletet úgy, hogyhttp://localhost:< kérést GET küldenek a port>/api/todoitems/címre.

Az Android emulátorban futó alkalmazások a 10.0.2.2-címen keresztül csatlakozhatnak a helyi HTTP-webszolgáltatásokhoz. Ez a cím a gazdagép visszacsatolási felületének (127.0.0.1 a fejlesztői gépen) aliasa. Ehhez az IP-címhez hálózati biztonsági konfigurációt is be kell állítani. Ha például egy helyi HTTP-webszolgáltatás az /api/todoitems/ relatív URI-n keresztül tesz elérhetővé egy GET műveletet, az Android emulátorban futó alkalmazás felhasználhatja a műveletet egy GET kérés http://10.0.2.2:/api/todoitems/elküldésével.

Megjegyzés:

ASP.NET helyi gazdagépen teszt alatt futó alapvető webszolgáltatásoknak le kell tiltaniük a HTTPS-átirányításokat a Startup.cs fájlban található utasítás app.UseHttpsRedirection(); megjegyzésével.

Az operációs rendszer észlelése

Az alkalmazás az osztály használatával DeviceInfo meghatározhatja, hogy melyik platformon fut. Az alábbi példában az alkalmazás a BaseAddress változót egy másik értékre állítja attól függően, hogy Androidon fut-e:

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