Als u migreert naar versie 3.1 van .NET Core of ASP.NET Core, kunnen de belangrijke wijzigingen in dit artikel van invloed zijn op uw app.
ASP.NET Core
HTTP: Wijzigingen in browser samesite zijn van invloed op verificatie
Sommige browsers, zoals Chrome en Firefox, hebben belangrijke wijzigingen aangebracht in hun implementaties van SameSite cookies. De wijzigingen zijn van invloed op scenario's voor externe verificatie, zoals OpenID Verbinding maken en WS-Federation, die zich moeten afmelden door te verzendenSameSite=None. SameSite=None Breekt echter af op iOS 12 en sommige oudere versies van andere browsers. De app moet deze versies snuiven en weglaten SameSite.
SameSite is een conceptstandaardextensie voor 2016 voor HTTP-cookies. Het is bedoeld om aanvraagvervalsing op meerdere sites (CSRF) te beperken. Dit is oorspronkelijk ontworpen als een functie waaraan de servers zouden kiezen door de nieuwe parameters toe te voegen. ASP.NET Core 2.0 heeft initiële ondersteuning toegevoegd voor SameSite.
Nieuw gedrag
Google heeft een nieuwe conceptstandaard voorgesteld die niet compatibel is met eerdere versies. De standaardinstelling wijzigt de standaardmodus Lax in en voegt een nieuwe vermelding None toe om u af te melden. Lax Het is echter voldoende voor de meeste app-cookies. De standaardmodus wordt echter verbroken, zoals OpenID-Verbinding maken en WS-Federation-aanmelding. De meeste OAuth-aanmeldingen worden niet beïnvloed vanwege verschillen in de manier waarop de aanvraag verloopt. De nieuwe None parameter veroorzaakt compatibiliteitsproblemen met clients die de vorige conceptstandaard hebben geïmplementeerd (bijvoorbeeld iOS 12). Chrome 80 bevat de wijzigingen. Zie samesite-updates voor de tijdlijn van de chrome-productlancering.
ASP.NET Core 3.1 is bijgewerkt om het nieuwe SameSite gedrag te implementeren. De update herdefinieert het gedrag van SameSiteMode.None verzenden SameSite=None en voegt een nieuwe waarde SameSiteMode.Unspecified toe om het SameSite kenmerk weg te laten. Alle cookie-API's zijn nu standaard ingesteldUnspecified, hoewel sommige onderdelen die cookies gebruiken waarden specifieker hebben ingesteld voor hun scenario's, zoals de OpenID Verbinding maken correlatie en niet-cookies.
Browser- en specificatiewijzigingen zoals beschreven in de voorgaande tekst.
Aanbevolen actie
Apps die communiceren met externe sites, zoals via aanmelding van derden, moeten:
Test deze scenario's in meerdere browsers.
Pas de sniffing-beperking van de cookiebeleidsbrowser toe die wordt besproken in oudere browsers ondersteunen.
Zie de volgende sectie voor het testen en sniffen van browsers.
Bepalen of u last hebt van
Test uw web-app met behulp van een clientversie die kan kiezen voor het nieuwe gedrag. Chrome, Firefox en Microsoft Edge Chromium hebben allemaal nieuwe markeringen voor opt-in-functies die kunnen worden gebruikt voor het testen. Controleer of uw app compatibel is met oudere clientversies nadat u de patches hebt toegepast, met name Safari. Zie Ondersteuning voor oudere browsers voor meer informatie.
Chrome
Chrome 78 en hoger leveren misleidende testresultaten op. Deze versies hebben een tijdelijke oplossing en staan cookies toe die minder dan twee minuten oud zijn. Als de juiste testvlagmen zijn ingeschakeld, levert Chrome 76 en 77 nauwkeurigere resultaten op. Als u het nieuwe gedrag wilt testen, schakelt chrome://flags/#same-site-by-default-cookies u in of uit op ingeschakeld. Chrome 75 en eerder worden gerapporteerd dat ze mislukken met de nieuwe None instelling. Zie Ondersteuning voor oudere browsers voor meer informatie.
Google maakt geen oudere Chrome-versies beschikbaar. U kunt echter oudere versies van Chromium downloaden, wat voldoende is om te testen. Volg de instructies bij Download Chromium.
Safari 12 heeft het vorige concept strikt geïmplementeerd en mislukt als de nieuwe None waarde in cookies wordt weergegeven. Dit moet worden vermeden via de browser-sniffing-code die wordt weergegeven in oudere browsers ondersteunen. Zorg ervoor dat u Safari 12 en 13 en op WebKit gebaseerde aanmeldingen in os-stijl test met behulp van Microsoft Authentication Library (MSAL), Active Directory Authentication Library (ADAL) of de bibliotheek die u gebruikt. Het probleem is afhankelijk van de onderliggende versie van het besturingssysteem. OSX Mojave 10.14 en iOS 12 zijn bekend dat er compatibiliteitsproblemen zijn met het nieuwe gedrag. Als u een upgrade uitvoert naar OSX Catalina 10.15 of iOS 13, wordt het probleem opgelost. Safari heeft momenteel geen opt-in-vlag voor het testen van het nieuwe specificatiegedrag.
Firefox
Firefox-ondersteuning voor de nieuwe standaard kan worden getest op versie 68 en hoger door u aan te vragen op de about:config pagina met de functievlag network.cookie.sameSite.laxByDefault. Er zijn geen compatibiliteitsproblemen gerapporteerd in oudere versies van Firefox.
Microsoft Edge
Hoewel Microsoft Edge de oude SameSite standaard ondersteunt, had het vanaf versie 44 geen compatibiliteitsproblemen met de nieuwe standaard.
Microsoft Edge Chromium
De functievlag is edge://flags/#same-site-by-default-cookies. Er zijn geen compatibiliteitsproblemen waargenomen bij het testen met Microsoft Edge Chromium 78.
Electron
Versies van Electron bevatten oudere versies van Chromium. De versie van Electron die door Microsoft Teams wordt gebruikt, is bijvoorbeeld Chromium 66, dat het oudere gedrag vertoont. Voer uw eigen compatibiliteitstests uit met de versie van Electron die uw product gebruikt. Zie Ondersteuning voor oudere browsers voor meer informatie.
Ondersteuning voor oudere browsers
De standaard van 2016 SameSite vereist dat onbekende waarden worden behandeld als SameSite=Strict waarden. Daarom kunnen oudere browsers die de oorspronkelijke standaard ondersteunen, breken wanneer ze een SameSite eigenschap met een waarde van None. Web-apps moeten browsersniffing implementeren als ze deze oude browsers willen ondersteunen. ASP.NET Core implementeert geen browser-sniffing voor u omdat User-Agent aanvraagheaderwaarden zeer instabiel zijn en wekelijks worden gewijzigd. In plaats daarvan kunt u met een uitbreidingspunt in het cookiebeleid -specifieke logica toevoegen User-Agent.
Voeg in Startup.cs de volgende code toe:
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
}
Schakelopties voor afmelden
Met de Microsoft.AspNetCore.SuppressSameSiteNone compatibiliteitsswitch kunt u zich tijdelijk afmelden voor het nieuwe ASP.NET Core-cookiegedrag. Voeg de volgende JSON toe aan een runtimeconfig.template.json-bestand in uw project:
Ontwerptijd-builds retourneren alleen pakketverwijzingen op het hoogste niveau
Vanaf .NET Core SDK 3.1.400 worden alleen pakketverwijzingen op het hoogste niveau geretourneerd door het RunResolvePackageDependencies doel.
Versie geïntroduceerd
.NET Core SDK 3.1.400
Wijzigingsbeschrijving
In eerdere versies van de .NET Core SDK heeft het RunResolvePackageDependencies doel de volgende MSBuild-items gemaakt die informatie bevatten uit het NuGet-assetsbestand:
PackageDefinitions
PackageDependencies
TargetDefinitions
FileDefinitions
FileDependencies
Deze gegevens worden door Visual Studio gebruikt om het knooppunt Afhankelijkheden in Solution Explorer te vullen. Het kan echter een grote hoeveelheid gegevens zijn en de gegevens zijn niet nodig, tenzij het knooppunt Afhankelijkheden wordt uitgevouwen.
Vanaf .NET Core SDK versie 3.1.400 worden de meeste van deze items niet standaard gegenereerd. Alleen items van het type Package worden geretourneerd. Als Visual Studio de items nodig heeft om het knooppunt Afhankelijkheden te vullen, worden de gegevens rechtstreeks uit het assetsbestand gelezen.
Reden voor wijziging
Deze wijziging is geïntroduceerd om de prestaties van oplossingsbelastingen in Visual Studio te verbeteren. Voorheen zouden alle pakketverwijzingen worden geladen, wat betrekking had op het laden van veel verwijzingen die de meeste gebruikers nooit zouden bekijken.
Aanbevolen actie
Als u MSBuild-logica hebt die afhankelijk is van deze items die worden gemaakt, stelt u de EmitLegacyAssetsFileItems eigenschap true in op in uw projectbestand. Met deze instelling wordt het vorige gedrag ingeschakeld waarbij alle items worden gemaakt.
Vanaf .NET Core 3.1 zijn sommige Besturingselementen voor Windows Forms niet meer beschikbaar.
Wijzigingsbeschrijving
Vanaf .NET Core 3.1 zijn verschillende Besturingselementen voor Windows Forms niet meer beschikbaar. Vervangende besturingselementen met een beter ontwerp en ondersteuning zijn geïntroduceerd in .NET Framework 2.0. De afgeschafte besturingselementen zijn eerder verwijderd uit designer-werksets, maar waren nog steeds beschikbaar om te worden gebruikt.
De gebeurtenis CellFormatting wordt niet gegenereerd als knopinfo wordt weergegeven
A DataGridView toont nu de tekst en foutknopinfo van een cel wanneer u de muisaanwijzer aanwijst en wanneer deze is geselecteerd via het toetsenbord. Als er knopinfo wordt weergegeven, wordt de DataGridView.CellFormatting gebeurtenis niet gegenereerd.
Wijzigingsbeschrijving
Voorafgaand aan .NET Core 3.1, waarop DataGridView de ShowCellToolTips eigenschap is ingesteld om knopinfo weer te true geven voor de tekst en fouten van een cel toen de cel werd aangeroepen door een muis. Knopinfo is niet weergegeven wanneer een cel is geselecteerd via het toetsenbord (bijvoorbeeld met de Tab-toets, sneltoetsen of pijlnavigatie). Als de gebruiker een cel heeft bewerkt en terwijl de DataGridView bewerkingsmodus nog in de bewerkingsmodus stond, heeft u de muisaanwijzer boven een cel geplaatst waarvoor de ToolTipText eigenschap niet is ingesteld, een CellFormatting gebeurtenis gegenereerd om de tekst van de cel op te maken voor weergave in de cel.
Als u wilt voldoen aan de toegankelijkheidsstandaarden, begint u in .NET Core 3.1, een DataGridView eigenschap die is ShowCellToolTips ingesteld om knopinfo weer te true geven voor de tekst en fouten van een cel, niet alleen wanneer de cel wordt aangezet, maar ook wanneer deze is geselecteerd via het toetsenbord. Als gevolg van deze wijziging wordt de CellFormatting gebeurtenis niet gegenereerd wanneer cellen die niet over de ToolTipText eigenschappenset beschikken, worden aangezet terwijl de DataGridView bewerkingsmodus is ingeschakeld. De gebeurtenis wordt niet gegenereerd omdat de inhoud van de zwevende cel wordt weergegeven als knopinfo in plaats van in de cel te worden weergegeven.
Versie geïntroduceerd
3.1
Aanbevolen actie
Herstructureer alle code die afhankelijk is van de CellFormatting gebeurtenis terwijl deze zich in de DataGridView bewerkingsmodus bevindt.
De bron voor deze inhoud vindt u op GitHub, waar u ook problemen en pull-aanvragen kunt maken en controleren. Bekijk onze gids voor inzenders voor meer informatie.
.NET-feedback
.NET is een open source project. Selecteer een koppeling om feedback te geven:
Maak een gebruikersinterface met gegevensbinding. Uw gebruikersinterface wordt automatisch bijgewerkt op basis van de meest recente gegevens, terwijl de gegevens worden bijgewerkt als reactie op wijzigingen in de gebruikersinterface.