Megosztás a következőn keresztül:


Kompatibilitástörő változások a .NET Core 3.1-ben

Ha a .NET Core vagy ASP.NET Core 3.1-es verziójára migrál, a cikkben felsorolt kompatibilitástörő változások hatással lehetnek az alkalmazásra.

ASP.NET Core

HTTP: A Browser SameSite módosításai hatással vannak a hitelesítésre

Egyes böngészők, például a Chrome és a Firefox, kompatibilitástörő módosításokat hajtottak végre a cookie-k implementációiban SameSite . A módosítások hatással vannak a távoli hitelesítési forgatókönyvekre, például az OpenID Csatlakozás és a WS-Federationre, amelyeknek le kell tiltaniük a küldéstSameSite=None. Az SameSite=None iOS 12 és más böngészők néhány régebbi verziója azonban megszakad. Az alkalmazásnak ki kell szippantania ezeket a verziókat, és el kell hagynia SameSite.

A probléma megvitatásához lásd: dotnet/aspnetcore#14996.

Bevezetett verzió

3.1 Előzetes verzió 1

Régi viselkedés

SameSite 2016-os szabványkiterjesztés a HTTP-cookie-khoz. Célja a helyek közötti hamisítás (CSRF) enyhítése. Ezt eredetileg olyan funkcióként tervezték, amelyet a kiszolgálók az új paraméterek hozzáadásával választottak. ASP.NET Core 2.0 kezdeti támogatása a következőhöz SameSite: .

Új viselkedés

A Google egy olyan új szabványtervezetet javasolt, amely nem kompatibilis visszafelé. A standard módosítja az alapértelmezett módotLax, és hozzáad egy új bejegyzést None a letiltáshoz. Lax elegendő a legtöbb alkalmazás cookie-hoz, azonban megszakítja a helyek közötti forgatókönyveket, például az OpenID Csatlakozás és a WS-Federation bejelentkezést. A legtöbb OAuth-bejelentkezést nem érintik a kérések folyamatának eltérései. Az új None paraméter kompatibilitási problémákat okoz a korábbi szabványtervezetet implementáló ügyfelekkel (például iOS 12). A Chrome 80 tartalmazza a módosításokat. Lásd: SameSite Frissítések a Chrome termékindítási ütemtervéhez.

ASP.NET Core 3.1 frissült az új SameSite viselkedés implementálásához. A frissítés újradefiniálja a kibocsátandó viselkedéstSameSiteMode.None, és hozzáad egy új értéket SameSiteMode.Unspecified az SameSite attribútum kihagyásához.SameSite=None Az összes cookie API alapértelmezés szerint Unspecifiedaz, bár egyes cookie-kat használó összetevők a forgatókönyveikre jellemzőbb értékeket állít be, például az OpenID Csatlakozás korrelációt és a nem használt cookie-kat.

Az ezen a területen végzett egyéb legutóbbi változásokért lásd : HTTP: Néhány cookie SameSite alapértelmezett értéke Nincs értékre módosult. A ASP.NET Core 3.0-ban a legtöbb alapértelmezett érték át lett váltva SameSiteMode.Lax SameSiteMode.None (de továbbra is a korábbi szabványt használja).

A változás oka

A böngésző és a specifikáció az előző szövegben leírtak szerint változik.

A távoli webhelyekkel (például külső bejelentkezéssel) kommunikáló alkalmazásoknak a következőkre van szükségük:

A tesztelési és böngészőszkennelési utasításokért tekintse meg a következő szakaszt.

Annak megállapítása, hogy érintett-e

Tesztelje a webalkalmazást egy ügyfélverzióval, amely képes az új viselkedésre. A Chrome, a Firefox és a Microsoft Edge Chromium mind új, tesztelésre használható opt-in funkciójelzőkkel rendelkezik. Ellenőrizze, hogy az alkalmazás kompatibilis-e a régebbi ügyfélverziókkal a javítások alkalmazása után, különösen a Safari esetében. További információ: Régebbi böngészők támogatása.

Chrome

A Chrome 78 és újabb verziói félrevezető teszteredményeket eredményeznek. Ezek a verziók ideiglenesen enyhítik a működést, és engedélyezik a két percnél régebbi cookie-kat. A megfelelő tesztjelzők engedélyezésével a Chrome 76 és a 77 pontosabb eredményeket eredményez. Az új viselkedés teszteléséhez váltson chrome://flags/#same-site-by-default-cookies az engedélyezésre. A Chrome 75-ös és korábbi verziói az új None beállítással meghiúsulnak. További információ: Régebbi böngészők támogatása.

A Google nem teszi elérhetővé a régebbi Chrome-verziókat. Azonban letöltheti a Chromium régebbi verzióit, amelyek elegendőek a teszteléshez. Kövesse a Download Chromium utasításait.

Safari

A Safari 12 szigorúan implementálta az előző vázlatot, és meghiúsul, ha az új None értéket látja a cookie-kban. Ezt a régebbi böngészők támogatásában megjelenő böngészőszniffing-kóddal kell elkerülni. Győződjön meg arról, hogy teszteli a Safari 12-et és a 13-at, valamint a WebKit-alapú, operációsrendszer-alapú bejelentkezéseket a Microsoft Authentication Library (MSAL), az Active Directory Authentication Library (ADAL) vagy a használt tár használatával. A probléma az operációs rendszer alapjául szolgáló verziótól függ. Az OSX Mojave 10.14 és az iOS 12 ismerten kompatibilitási problémákat okoz az új viselkedéssel. Az OSX Catalina 10.15-ös vagy iOS 13-ra való frissítés megoldja a problémát. A Safari jelenleg nem rendelkezik az új specifikáció viselkedésének tesztelésére szolgáló bejelentkezési jelzőval.

Firefox

Az új szabvány Firefox-támogatása a 68-es és újabb verzióban tesztelhető, ha a about:config funkciójelzővel network.cookie.sameSite.laxByDefaultrendelkező oldalon jelentkezik. A Firefox régebbi verzióiban nem jelentettek kompatibilitási problémákat.

Microsoft Edge

Bár a Microsoft Edge támogatja a régi SameSite szabványt, a 44-es verziótól nem volt kompatibilitási probléma az új szabványsal.

Microsoft Edge Chromium

A funkciójelző a következő edge://flags/#same-site-by-default-cookies: . A Microsoft Edge Chromium 78-nal végzett tesztelés során nem figyeltek meg kompatibilitási problémákat.

Electron

Az Elektron verziói közé tartoznak a Chromium régebbi verziói. A Microsoft Teams által használt Elektron verziója például a Chromium 66, amely a régebbi viselkedést mutatja. Saját kompatibilitási tesztelést végezhet a termék által használt Electron verziójával. További információ: Régebbi böngészők támogatása.

Régebbi böngészők támogatása

A 2016-os SameSite szabvány előírta, hogy az ismeretlen értékeket értékekként SameSite=Strict kell kezelni. Következésképpen az eredeti szabványt támogató régebbi böngészők megszakadhatnak, ha olyan tulajdonságot SameSite látnak, amelynek értéke a következő None: . A webalkalmazásoknak böngészőszniffinget kell implementálniuk, ha támogatni szeretnék ezeket a régi böngészőket. ASP.NET Core nem valósítja meg a böngészőszippelést, mert User-Agent a kérésfejlécek értékei erősen instabilak, és heti rendszerességgel változnak. Ehelyett a cookie-szabályzat bővítménypontja lehetővé teszi a -specifikus logika hozzáadását User-Agent.

A Startup.cs adja hozzá a következő kódot:

private void CheckSameSite(HttpContext httpContext, CookieOptions options)
{
    if (options.SameSite == SameSiteMode.None)
    {
        var userAgent = httpContext.Request.Headers["User-Agent"].ToString();
        // TODO: Use your User Agent library of choice here.
        if (/* UserAgent doesn't support new behavior */)
        {
            options.SameSite = SameSiteMode.Unspecified;
        }
    }
}

public void ConfigureServices(IServiceCollection services)
{
    services.Configure<CookiePolicyOptions>(options =>
    {
        options.MinimumSameSitePolicy = SameSiteMode.Unspecified;
        options.OnAppendCookie = cookieContext =>
            CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
        options.OnDeleteCookie = cookieContext =>
            CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
    });
}

public void Configure(IApplicationBuilder app)
{
    // Before UseAuthentication or anything else that writes cookies.
    app.UseCookiePolicy();

    app.UseAuthentication();
    // code omitted for brevity
}
Opt-out kapcsolók

A Microsoft.AspNetCore.SuppressSameSiteNone kompatibilitási kapcsoló lehetővé teszi, hogy ideiglenesen kikapcsolja az új ASP.NET Core cookie viselkedését. Adja hozzá a következő JSON-t egy runtimeconfig.template.json fájlhoz a projektben:

{
  "configProperties": {
    "Microsoft.AspNetCore.SuppressSameSiteNone": "true"
  }
}
Egyéb verziók

A kapcsolódó SameSite javítások a következőkhöz lesznek hamarosan elérhetők:

  • ASP.NET Core 2.1, 2.2 és 3.0
  • Microsoft.Owin 4.1
  • System.Web(.NET-keretrendszer 4.7.2 és újabb verziók esetén)

Kategória

ASP.NET

Érintett API-k


Telepítés

x86 gazdagép elérési útja 64 bites Windows rendszeren

Msbuild

A tervezési idejű buildek csak legfelső szintű csomaghivatkozásokat adnak vissza

A .NET Core SDK 3.1.400-tól kezdve a cél csak legfelső szintű csomaghivatkozásokat ad RunResolvePackageDependencies vissza.

Bevezetett verzió

.NET Core SDK 3.1.400

Módosítás leírása

A .NET Core SDK korábbi verzióiban a cél a RunResolvePackageDependencies következő MSBuild elemeket hozta létre, amelyek információkat tartalmaztak a NuGet-objektumok fájljából:

  • PackageDefinitions
  • PackageDependencies
  • TargetDefinitions
  • FileDefinitions
  • FileDependencies

Ezeket az adatokat a Visual Studio használja a Függőségek csomópont feltöltéséhez Megoldáskezelő. Ez azonban nagy mennyiségű adat lehet, és az adatokra nincs szükség, kivéve, ha a Függőségek csomópont ki van bontva.

A .NET Core SDK 3.1.400-es verziójától kezdve a legtöbb elem alapértelmezés szerint nem jön létre. A rendszer csak a típuselemeket Package adja vissza. Ha a Visual Studiónak szüksége van az elemekre a Függőségek csomópont feltöltéséhez, az adatokat közvetlenül az eszközfájlból olvassa be.

A változás oka

Ezt a módosítást a Visual Studióban a megoldásbetöltési teljesítmény javítása érdekében vezettük be. Korábban az összes csomaghivatkozás betöltődött, ami sok olyan hivatkozást tartalmazott, amelyeket a felhasználók többsége soha nem látna.

Ha olyan MSBuild logikával rendelkezik, amely ezektől az elemektől függ, állítsa be a tulajdonságot true a EmitLegacyAssetsFileItems projektfájlba. Ez a beállítás lehetővé teszi az összes elem létrehozásának korábbi viselkedését.

Kategória

Msbuild

Érintett API-k

n/a


SDK

Eszközjegyzékek a gyökérmappában

Windows Forms

Eltávolított vezérlők

A .NET Core 3.1-től kezdve bizonyos Windows Forms-vezérlők már nem érhetők el.

Módosítás leírása

A .NET Core 3.1-től kezdve a Windows Forms különböző vezérlői már nem érhetők el. A jobb kialakítású és támogatott cserevezérlőket a 2.0-s .NET-keretrendszer vezették be. Az elavult vezérlőket korábban eltávolították a tervezőeszközkészletekből, de továbbra is használhatók voltak.

A következő típusok már nem érhetők el:

Bevezetett verzió

3.1

Minden eltávolított vezérlő ajánlott cserevezérlővel rendelkezik. Tekintse meg a következő táblázatot:

Eltávolított vezérlő (API) Javasolt csere Eltávolított társított API-k
Contextmenu ContextMenuStrip
Datagrid Datagridview DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType
MainMenu MenuStrip
Menü ToolStripDropDown, ToolStripDropDownMenu MenuItemCollection
Menuitem ToolStripMenuItem
Eszköztár Eszközsávon ToolBarAppearance
ToolBarButton ToolStripButton ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign

Kategória

Windows Forms

Érintett API-k


A CellFormatting esemény nem jelenik meg, ha megjelenik az elemleírás

Ekkor DataGridView megjelenik egy cella szövegének és hibaelemeinek elemleírása, ha az egérrel rámutat, és a billentyűzeten keresztül van kiválasztva. Ha elemleírás jelenik meg, az DataGridView.CellFormatting esemény nem jelenik meg.

Módosítás leírása

A .NET Core 3.1-et megelőzően egy DataGridView olyan tulajdonság volt ShowCellToolTips beállítva true , amely elemleírást mutatott egy cella szövegéhez, és hibákat észlelt, amikor a cellát egérrel mozgatta. Az elemleírások nem jelennek meg, amikor egy cella ki van jelölve a billentyűzeten keresztül (például a Tab billentyűvel, a billentyűparancsokkal vagy a nyílnavigációval). Ha a felhasználó szerkesztett egy cellát, majd miközben még DataGridView szerkesztési módban volt, egy olyan cellára mutatott, amely nem rendelkezik a ToolTipText tulajdonságkészlettel, egy eseményt emeltek ki, CellFormatting amely formázza a cella szövegét a cellában való megjelenítéshez.

A .NET Core 3.1-től kezdődően az akadálymentességi szabványoknak való megfelelés érdekében a DataGridView tulajdonság úgy van ShowCellToolTips beállítva true , hogy elemleírásokat jelenítsen meg egy cella szövegéhez és hibáihoz nem csak a cella rámutatásakor, hanem a billentyűzeten keresztüli kijelöléskor is. A változás következtében az esemény nem jön létre, ha a CellFormatting tulajdonsághalmazt nem ToolTipText tartalmazó cellák a DataGridView szerkesztési módban vannak. Az esemény nem merül fel, mert a rámutatott cella tartalma elemleírásként jelenik meg a cellában való megjelenítés helyett.

Bevezetett verzió

3.1

Az eseménytől DataGridView függő CellFormatting kód újrabontása szerkesztési módban.

Kategória

Windows Forms

Érintett API-k

Egyik sem


Lásd még