Poznámka:
Přístup k této stránce vyžaduje autorizaci. Můžete se zkusit přihlásit nebo změnit adresáře.
Přístup k této stránce vyžaduje autorizaci. Můžete zkusit změnit adresáře.
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.
ASP.NET Core
HTTP: Změny samesite prohlížeče mají vliv na ověřování
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 Connect 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.
Verze byla představena
3.1 Předběžná verze 1
Staré chování
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.
Nové chování
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 Connect 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. Viz Časová osa spuštění produktu SameSite pro 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í konkrétnější hodnoty pro jejich scénáře, jako je korelace OpenID Connect 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.LaxSameSiteMode.None (ale stále používá předchozí standard).
Důvod změny
Prohlížeč a specifikace se mění, jak je uvedeno v předchozím textu.
Doporučená akce
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.
Určení, jestli se vás to týká
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čů.
Chrom
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
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.
Firefox
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.laxByDefaultfunkce . Ve starších verzích Firefoxu nebyly hlášeny žádné problémy s kompatibilitou.
Microsoft Edge
Microsoft Edge sice podporuje starý SameSite standard, ale verze 44 nemá žádné problémy s kompatibilitou s novým standardem.
Microsoft Edge Chromium
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.
Elektron
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čů.
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če pro odhlášení
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"
}
}
Jiné verze
Související SameSite opravy jsou připravované pro:
- ASP.NET Core 2.1, 2.2 a 3.0
-
Microsoft.Owin4.1 -
System.Web(pro rozhraní .NET Framework 4.7.2 a novější)
Kategorie
ASP.NET
Ovlivněná rozhraní API
- 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
Nasazení
Cesta hostitele x86 v 64bitovém systému Windows
MSBuild
Sestavení v době návrhu vrací pouze odkazy na balíčky nejvyšší úrovně.
Počínaje sadou .NET Core SDK 3.1.400 vrací cílový RunResolvePackageDependencies pouze odkazy na balíčky na nejvyšší úrovni.
Verze byla představena
.NET Core SDK 3.1.400
Změnit popis
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:
PackageDefinitionsPackageDependenciesTargetDefinitionsFileDefinitionsFileDependencies
Tato data používá Visual Studio k naplnění uzlu Závislosti v Průzkumníku ř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ávislostí, čte informace přímo ze souboru assets.
Důvod změny
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.
Doporučená akce
Pokud máte logiku MSBuild, která závisí na vytvoření těchto položek, nastavte vlastnost EmitLegacyAssetsFileItems v souboru projektu na true. Toto nastavení umožňuje předchozí chování, ve kterém jsou vytvořeny všechny položky.
Kategorie
MSBuild
Ovlivněná rozhraní API
není k dispozici
sada SDK
Manifesty nástrojů v kořenové složce
model Windows Forms
Odebrané ovládací prvky
Počínaje verzí .NET Core 3.1 už některé ovládací prvky Windows Forms nejsou k dispozici.
Změnit popis
Od verze .NET Core 3.1 už nejsou k dispozici různé ovládací prvky 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
Verze byla představena
3.1
Doporučená akce
Každý odebraný ovládací prvek má doporučený náhradní ovládací prvek. Projděte si následující tabulku:
| Odebrání ovládacího prvku (API) | Doporučená náhrada | Přidružená rozhraní API, která se odeberou |
|---|---|---|
| Kontextové menu | KontextMenuStrip | |
| DataGrid | Tabulkové zobrazení dat | DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType |
| Hlavní nabídka | MenuStrip | |
| Jídelní lístek | ToolStripDropDown, ToolStripDropDownMenu | KolekceMenuPoložek |
| Položka menu | ToolStripMenuItem | |
| Panel nástrojů | ToolStrip | Vzhled nástrojové lišty |
| tlačítko na panelu nástrojů | Tlačítko nástrojového pruhu | ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign |
Kategorie
model Windows Forms
Ovlivněná rozhraní API
- 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
Událost CellFormatting se nevyvolá, pokud je zobrazen tooltip.
DataGridView teď zobrazuje text buňky a popisy chyb při najetí myší a při výběru pomocí klávesnice. Pokud se zobrazí popis, událost DataGridView.CellFormatting se nevyvolá.
Změnit popis
Před .NET Core 3.1 DataGridView, který měl vlastnost ShowCellToolTips nastavenou na true, zobrazil textový rámeček s textem buňky a chybami, když byla buňka přejeta myší. Popisky se nezobrazovaly, když byla buňka vybrána pomocí klávesnice, například klávesou Tab, klávesovými zkratkami nebo navigací pomocí šipek. Pokud uživatel upravil buňku a potom, zatímco DataGridView byl stále v režimu úprav, najedl myší na buňku, která nemá nastavenou vlastnost ToolTipText, byla vyvolána událost CellFormatting pro formátování textu buňky pro zobrazení v buňce.
Aby byly splněny standardy přístupnosti, od .NET Core 3.1 zobrazí DataGridView, která má vlastnost ShowCellToolTips nastavenou na true, nápovědy pro text a chyby buňky nejen tehdy, když je na buňku najeto myší, ale také když je vybraná pomocí klávesnice. V důsledku této změny není událost CellFormatting vyvolána, když je ToolTipText v režimu úprav a jsou najeté myší buňky, které nemají nastavenou vlastnost DataGridView. Událost není vyvolána, protože obsah najeté buňky se místo zobrazení v buňce zobrazí jako popis.
Verze byla představena
3.1
Doporučená akce
Refaktorovat jakýkoli kód, který závisí na události CellFormatting, zatímco DataGridView je v editačním režimu.
Kategorie
model Windows Forms
Ovlivněná rozhraní API
Žádné