Zásadní změny v .NET Core 3.1
Pokud migrujete na verzi 3.1 .NET Core nebo ASP.NET Core, můžou zásadní změny uvedené v tomto článku ovlivnit vaši aplikaci.
Některé prohlížeče, jako je Chrome a Firefox, provedly zásadní změny ve svých implementacích SameSite
souborů cookie. Změny mají vliv na scénáře vzdáleného ověřování, jako je OpenID Připojení a WS-Federation, které se musí odhlásit odesláním SameSite=None
. SameSite=None
V iOSu 12 a některých starších verzích jiných prohlížečů se ale přeruší. Aplikace musí tyto verze zašifrovat a vynechat SameSite
.
Diskuzi o tomto problému najdete v tématu dotnet/aspnetcore#14996.
3.1 Preview 1
SameSite
je standardní rozšíření konceptu 2016 pro soubory cookie HTTP. Cílem je zmírnit padělání žádostí mezi weby (CSRF). Původně byla navržena jako funkce, do které by se servery přihlásily přidáním nových parametrů. ASP.NET Core 2.0 přidala počáteční podporu pro SameSite
.
Google navrhl nový koncept, který není zpětně kompatibilní. Standardní režim změní na výchozí režim Lax
a přidá novou položku None
pro odhlášení. Lax
Stačí pro většinu souborů cookie aplikace, ale přeruší scénáře mezi weby, jako je OpenID Připojení a přihlášení WS-Federation. Většina přihlášení OAuth není ovlivněná kvůli rozdílům ve způsobu toku požadavků. Nový None
parametr způsobuje problémy s kompatibilitou s klienty, kteří implementovali předchozí standard konceptu (například iOS 12). Chrome 80 bude obsahovat změny. Podívejte se na Aktualizace SameSite pro časovou osu spuštění produktu Chrome.
ASP.NET Core 3.1 byl aktualizován, aby implementoval nové SameSite
chování. Aktualizace předefinuje chování SameSiteMode.None
generování SameSite=None
a přidá novou hodnotu SameSiteMode.Unspecified
, která vynechá SameSite
atribut. Všechna rozhraní API souborů cookie se teď ve výchozím nastavení používajíUnspecified
, i když některé komponenty, které používají soubory cookie, nastavují hodnoty konkrétnější pro jejich scénáře, jako je openID Připojení korelace a jiné soubory cookie.
Další nedávné změny v této oblasti najdete v tématu HTTP: Některé soubory cookie SameSite se ve výchozím nastavení změnily na Žádné. Ve verzi ASP.NET Core 3.0 se většina výchozích hodnot změnila na SameSiteMode.Lax SameSiteMode.None (ale stále používá předchozí standard).
Prohlížeč a specifikace se mění, jak je uvedeno v předchozím textu.
Aplikace, které komunikují se vzdálenými weby, například prostřednictvím přihlášení třetích stran, musí:
- Tyto scénáře otestujte v několika prohlížečích.
- Použijte zmírnění rizik v prohlížeči zásad souborů cookie probírané ve starších prohlížečích podpory.
Pokyny k testování a šifrování prohlížeče najdete v následující části.
Otestujte webovou aplikaci pomocí klientské verze, která se může rozhodnout pro nové chování. Chrome, Firefox a Microsoft Edge Chromium mají nové příznaky funkce opt-in, které je možné použít k testování. Po použití oprav ověřte, že je vaše aplikace kompatibilní se staršími verzemi klientů, zejména Safari. Další informace najdete v tématu Podpora starších prohlížečů.
Chrome 78 a novější přinášejí zavádějící výsledky testu. Tyto verze mají dočasné omezení rizik a umožňují soubory cookie starší než dvě minuty. S povolenými příslušnými testovacími příznaky dají Chrome 76 a 77 přesnější výsledky. Pokud chcete otestovat nové chování, přepněte chrome://flags/#same-site-by-default-cookies
na povolenou možnost. Chrome 75 a starší se oznamují selhání s novým None
nastavením. Další informace najdete v tématu Podpora starších prohlížečů.
Google nezpřístupní starší verze Chromu. Můžete si ale stáhnout starší verze Chromium, které budou stačit pro testování. Postupujte podle pokynů ke stažení Chromium.
Safari 12 striktně implementoval předchozí koncept a selže, pokud se v souborech cookie zobrazí nová None
hodnota. To se musí vyhnout prostřednictvím kódu pro šifrování prohlížeče zobrazeného ve starších prohlížečích podpory. Ujistěte se, že testujete Safari 12 a 13 a také přihlášení založená na webové sadě OS pomocí knihovny Microsoft Authentication Library (MSAL), knihovny ADAL (Active Directory Authentication Library) nebo knihovny, kterou používáte. Problém závisí na základní verzi operačního systému. OSX Mojave 10.14 a iOS 12 jsou známé, že mají problémy s kompatibilitou s novým chováním. Problém řeší upgrade na OSX Catalina 10.15 nebo iOS 13. Safari momentálně nemá příznak výslovného souhlasu pro testování nového chování specifikace.
Podporu firefoxu pro nový standard lze testovat na verzi 68 a novější tím, že se přihlásíte na about:config
stránce s příznakem network.cookie.sameSite.laxByDefault
funkce . Ve starších verzích Firefoxu nebyly hlášeny žádné problémy s kompatibilitou.
Microsoft Edge sice podporuje starý SameSite
standard, ale verze 44 nemá žádné problémy s kompatibilitou s novým standardem.
Příznak funkce je edge://flags/#same-site-by-default-cookies
. Při testování s Microsoft Edge Chromium 78 nebyly pozorovány žádné problémy s kompatibilitou.
Verze Elektronu zahrnují starší verze Chromium. Například verze elektronu, kterou Microsoft Teams používá, je Chromium 66, což vykazuje starší chování. Proveďte vlastní testování kompatibility s verzí elektronu, kterou váš produkt používá. Další informace najdete v tématu Podpora starších prohlížečů.
Standard 2016 SameSite
nařídil, aby neznámé hodnoty byly považovány za SameSite=Strict
hodnoty. V důsledku toho mohou všechny starší prohlížeče, které podporují původní standard, přerušit, když uvidí SameSite
vlastnost s hodnotou None
. Webové aplikace musí implementovat šifrování prohlížeče, pokud mají v úmyslu podporovat tyto staré prohlížeče. ASP.NET Core pro vás neimplementuje šifrování prohlížeče, protože User-Agent
hodnoty hlaviček požadavků jsou vysoce nestabilní a mění se každý týden. Místo toho bod rozšíření v zásadách souborů cookie umožňuje přidat User-Agent
-specifickou logiku.
Do Startup.cs přidejte následující kód:
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
}
Přepínač Microsoft.AspNetCore.SuppressSameSiteNone
kompatibility umožňuje dočasně odhlásit nové chování souborů cookie ASP.NET Core. Do souboru runtimeconfig.template.json v projektu přidejte následující KÓD JSON:
{
"configProperties": {
"Microsoft.AspNetCore.SuppressSameSiteNone": "true"
}
}
Související SameSite
opravy jsou připravované pro:
- ASP.NET Core 2.1, 2.2 a 3.0
Microsoft.Owin
4.1System.Web
(pro rozhraní .NET Framework 4.7.2 a novější)
ASP.NET
- Microsoft.AspNetCore.Builder.CookiePolicyOptions.MinimumSameSitePolicy
- Microsoft.AspNetCore.Http.CookieBuilder.SameSite
- Microsoft.AspNetCore.Http.CookieOptions.SameSite
- Microsoft.AspNetCore.Http.SameSiteMode
- Microsoft.Net.Http.Headers.SameSiteMode
- Microsoft.Net.Http.Headers.SetCookieHeaderValue.SameSite
Cesta hostitele x86 v 64bitovém systému Windows
Počínaje sadou .NET Core SDK 3.1.400 se cíl vrátí pouze odkazy RunResolvePackageDependencies
na balíčky nejvyšší úrovně.
.NET Core SDK 3.1.400
V předchozích verzích sady .NET Core SDK RunResolvePackageDependencies
cíl vytvořil následující položky nástroje MSBuild, které obsahovaly informace ze souboru prostředků NuGet:
PackageDefinitions
PackageDependencies
TargetDefinitions
FileDefinitions
FileDependencies
Tato data používá Visual Studio k naplnění uzlu Závislosti v Průzkumník řešení. Může to ale být velké množství dat a data nejsou potřeba, pokud není rozbalený uzel Závislosti.
Počínaje sadou .NET Core SDK verze 3.1.400 se většina těchto položek ve výchozím nastavení nevygeneruje. Vrátí se pouze položky typu Package
. Pokud Visual Studio potřebuje položky k naplnění uzlu Závislosti, přečte informace přímo ze souboru prostředků.
Tato změna byla zavedena za účelem zlepšení výkonu načítání řešení v sadě Visual Studio. Dříve byly načteny všechny odkazy na balíčky, které zahrnovaly načítání mnoha odkazů, které by většina uživatelů nikdy nezobrazovala.
Pokud máte logiku NÁSTROJE MSBuild, která závisí na vytváření těchto položek, nastavte EmitLegacyAssetsFileItems
vlastnost do true
souboru projektu. Toto nastavení umožňuje předchozí chování, ve kterém jsou vytvořeny všechny položky.
MSBuild
–
Manifesty nástrojů v kořenové složce
Počínaje verzí .NET Core 3.1 už některé ovládací prvky model Windows Forms nejsou k dispozici.
Od verze .NET Core 3.1 už nejsou k dispozici různé ovládací prvky model Windows Forms. V rozhraní .NET Framework 2.0 byly zavedeny náhradní ovládací prvky, které mají lepší návrh a podporu. Zastaralé ovládací prvky byly dříve odebrány z nástrojů návrháře, ale byly stále k dispozici k použití.
Následující typy už nejsou k dispozici:
- ContextMenu
- DataGrid
- DataGrid.HitTestType
- DataGrid.HitTestInfo
- DataGridBoolColumn
- DataGridCell
- DataGridColumnStyle
- DataGridColumnStyle.DataGridColumnHeaderAccessibleObject
- DataGridColumnStyle.CompModSwitches
- DataGridLineStyle
- DataGridParentRowsLabelStyle
- DataGridPreferredColumnWidthTypeConverter
- DataGridTableStyle
- DataGridTextBox
- DataGridTextBoxColumn
- GridColumnStylesCollection
- GridTablesFactory
- GridTableStylesCollection
- IDataGridEditingService
- IMenuEditorService
- MainMenu
- Menu
- Menu.MenuItemCollection
- MenuItem
- ToolBar
- ToolBarAppearance
- ToolBarButton
- ToolBar.ToolBarButtonCollection
- ToolBarButtonClickEventArgs
- ToolBarButtonStyle
- ToolBarTextAlign
3.1
Každý odebraný ovládací prvek má doporučený náhradní ovládací prvek. Informace najdete v následující tabulce:
Odebrání ovládacího prvku (API) | Doporučená náhrada | Přidružená rozhraní API, která se odeberou |
---|---|---|
ContextMenu | ContextMenuStrip | |
DataGrid | Datagridview | DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType |
Mainmenu | MenuStrip | |
Nabídka | ToolStripDropDown, ToolStripDropDownMenu | MenuItemCollection |
MenuItem | Toolstripmenuitem | |
ToolBar | ToolStrip | ToolBarAppearance |
Toolbarbutton | Toolstripbutton | ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign |
Windows Forms
- System.Windows.Forms.ContextMenu
- System.Windows.Forms.GridColumnStylesCollection
- System.Windows.Forms.GridTablesFactory
- System.Windows.Forms.GridTableStylesCollection
- System.Windows.Forms.IDataGridEditingService
- System.Windows.Forms.MainMenu
- System.Windows.Forms.Menu
- System.Windows.Forms.Menu.MenuItemCollection
- System.Windows.Forms.MenuItem
- System.Windows.Forms.ToolBar
- System.Windows.Forms.ToolBar.ToolBarButtonCollection
- System.Windows.Forms.ToolBarAppearance
- System.Windows.Forms.ToolBarButton
- System.Windows.Forms.ToolBarButtonClickEventArgs
- System.Windows.Forms.ToolBarButtonStyle
- System.Windows.Forms.ToolBarTextAlign
- System.Windows.Forms.DataGrid
- System.Windows.Forms.DataGrid.HitTestType
- System.Windows.Forms.DataGridBoolColumn
- System.Windows.Forms.DataGridCell
- System.Windows.Forms.DataGridColumnStyle
- System.Windows.Forms.DataGridLineStyle
- System.Windows.Forms.DataGridParentRowsLabelStyle
- System.Windows.Forms.DataGridPreferredColumnWidthTypeConverter
- System.Windows.Forms.DataGridTableStyle
- System.Windows.Forms.DataGridTextBox
- System.Windows.Forms.DataGridTextBoxColumn
- System.Windows.Forms.Design.IMenuEditorService
Při DataGridView najetí myší myší a po výběru pomocí klávesnice se teď zobrazí popisy textu a chyby buňky. Pokud se zobrazí popis, DataGridView.CellFormatting událost se nevyvolá.
Před .NET Core 3.1, DataGridView který měl nastavenou ShowCellToolTips vlastnost true
zobrazovat popis textu buňky a chyby při najetí myší na buňku. Popisy nebyly zobrazeny, když byla buňka vybrána pomocí klávesnice (například pomocí klávesy Tab, klávesových zkratek nebo navigace se šipkami). Pokud uživatel upravil buňku a potom, i když DataGridView byl stále v režimu úprav, najedl myší na buňku, která nemá nastavenou ToolTipText vlastnost, CellFormatting byla vyvolána událost, která naformátuje text buňky pro zobrazení v buňce.
Pro splnění standardů přístupnosti počínaje rozhraním .NET Core 3.1, která má vlastnost nastavenou ShowCellToolTips tak, DataGridView aby true
zobrazovala popisy textu buňky a chyby nejen v případě, že je buňka najetá myší, ale také když je vybraná přes klávesnici. V důsledku této změny není událost vyvolána, pokud buňky, CellFormatting které nemají nastavenou ToolTipText vlastnost, jsou najet myší, když DataGridView je v režimu úprav. Událost není vyvolána, protože obsah najeté buňky se místo zobrazení v buňce zobrazí jako popis.
3.1
Refaktoring libovolného CellFormatting kódu, který závisí na události, když DataGridView je v režimu úprav.
Windows Forms
Nic
Zpětná vazba k produktu .NET
.NET je open source projekt. Vyberte odkaz pro poskytnutí zpětné vazby: