Catatan
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba masuk atau mengubah direktori.
Akses ke halaman ini memerlukan otorisasi. Anda dapat mencoba mengubah direktori.
Jika Anda bermigrasi ke .NET Core atau ASP.NET Core versi 3.1, perubahan mencolok yang tercantum dalam artikel ini dapat memengaruhi aplikasi Anda.
ASP.NET Core
HTTP: Perubahan SameSite Browser memengaruhi autentikasi
Beberapa browser, seperti Chrome dan Firefox, membuat perubahan mencolok pada SameSite implementasi mereka untuk cookie. Perubahan berdampak pada skenario autentikasi jarak jauh, seperti OpenID Connect dan WS-Federation, yang harus memilih keluar dengan mengirim SameSite=None. Namun, SameSite=None istirahat di iOS 12 dan beberapa versi browser lain yang lebih lama. Aplikasi ini perlu meng-sniff versi ini dan menghilangkan SameSite.
Untuk diskusi tentang masalah ini, lihat dotnet/aspnetcore#14996.
Versi yang diperkenalkan
3.1 Pratinjau 1
Perilaku lama
SameSite adalah ekstensi standar draf 2016 untuk cookie HTTP. Ini dimaksudkan untuk mengurangi Pemalsuan Permintaan Lintas Situs (CSRF). Ini awalnya dirancang sebagai fitur yang akan dipilih server dengan menambahkan parameter baru. ASP.NET Core 2.0 menambahkan dukungan awal untuk SameSite.
Perilaku baru
Google mengusulkan standar draf baru yang tidak kompatibel dengan versi lama. Standar mengubah mode default ke Lax dan menambahkan entri None baru untuk memilih keluar. Lax cukup untuk sebagian besar cookie aplikasi; namun, itu melanggar skenario lintas situs seperti OpenID Connect dan masuk WS-Federation. Sebagian besar login OAuth tidak terpengaruh karena perbedaan bagaimana permintaan mengalir. Parameter baru None menyebabkan masalah kompatibilitas dengan klien yang menerapkan standar draf sebelumnya (misalnya, iOS 12). Chrome 80 akan menyertakan perubahan. Lihat Pembaruan SameSite untuk garis waktu peluncuran produk Chrome.
ASP.NET Core 3.1 telah diperbarui untuk mengimplementasikan perilaku baru SameSite . Pembaruan mendefinisikan ulang perilaku untuk memancarkan SameSiteMode.NoneSameSite=None dan menambahkan nilai SameSiteMode.Unspecified baru untuk menghilangkan SameSite atribut. Semua API cookie sekarang default ke Unspecified, meskipun beberapa komponen yang menggunakan cookie menetapkan nilai yang lebih spesifik untuk skenarionya seperti korelasi OpenID Connect dan cookie nonce.
Untuk perubahan terbaru lainnya di area ini, lihat HTTP: Beberapa cookie SameSite default diubah menjadi Tidak Ada. Dalam ASP.NET Core 3.0, sebagian besar default diubah dari SameSiteMode.Lax ke SameSiteMode.None (tetapi masih menggunakan standar sebelumnya).
Alasan perubahan
Browser dan perubahan spesifikasi seperti yang diuraikan dalam teks sebelumnya.
Tindakan yang direkomendasikan
Aplikasi yang berinteraksi dengan situs jarak jauh, seperti melalui login pihak ketiga, perlu:
- Uji skenario tersebut di beberapa browser.
- Terapkan mitigasi sniffing browser kebijakan cookie yang dibahas di Mendukung browser lama.
Untuk petunjuk pengujian dan sniffing browser, lihat bagian berikut.
Menentukan apakah Anda terpengaruh
Uji aplikasi web Anda menggunakan versi klien yang dapat memilih perilaku baru. Chrome, Firefox, dan Microsoft Edge Chromium semuanya memiliki bendera fitur keikutsertaan baru yang dapat digunakan untuk pengujian. Verifikasi bahwa aplikasi Anda kompatibel dengan versi klien yang lebih lama setelah Anda menerapkan patch, terutama Safari. Untuk informasi selengkapnya, lihat Mendukung browser yang lebih lama.
Chrome
Chrome 78 dan yang lebih baru menghasilkan hasil pengujian yang menyesatkan. Versi tersebut memiliki mitigasi sementara dan memungkinkan cookie yang berusia kurang dari dua menit. Dengan bendera pengujian yang sesuai diaktifkan, Chrome 76 dan 77 menghasilkan hasil yang lebih akurat. Untuk menguji perilaku baru, alihkan chrome://flags/#same-site-by-default-cookies ke diaktifkan. Chrome 75 dan yang lebih lama dilaporkan gagal dengan pengaturan baru None . Untuk informasi selengkapnya, lihat Mendukung browser yang lebih lama.
Google tidak membuat versi Chrome yang lebih lama tersedia. Namun, Anda dapat mengunduh versi Chromium yang lebih lama, yang cukup untuk pengujian. Ikuti petunjuk di Unduh Chromium.
Safari
Safari 12 secara ketat menerapkan draf sebelumnya dan gagal jika melihat nilai baru None dalam cookie. Ini harus dihindari melalui kode sniffing browser yang ditampilkan di Mendukung browser lama. Pastikan Anda menguji Safari 12 dan 13 serta login gaya OS berbasis WebKit menggunakan Microsoft Authentication Library (MSAL), Active Directory Authentication Library (ADAL), atau pustaka mana pun yang Anda gunakan. Masalahnya tergantung pada versi OS yang mendasar. OSX Mojave 10.14 dan iOS 12 diketahui memiliki masalah kompatibilitas dengan perilaku baru. Meningkatkan ke OSX Catalina 10.15 atau iOS 13 memperbaiki masalah. Safari saat ini tidak memiliki bendera keikutsertaan untuk menguji perilaku spesifikasi baru.
Firefox
Dukungan Firefox untuk standar baru dapat diuji pada versi 68 dan yang lebih baru dengan ikut serta di about:config halaman dengan bendera network.cookie.sameSite.laxByDefaultfitur . Tidak ada masalah kompatibilitas yang dilaporkan pada versi Firefox yang lebih lama.
Microsoft Edge
Meskipun Microsoft Edge mendukung standar lama SameSite , pada versi 44, Microsoft Edge tidak memiliki masalah kompatibilitas dengan standar baru.
Microsoft Edge Chromium
Bendera fiturnya adalah edge://flags/#same-site-by-default-cookies. Tidak ada masalah kompatibilitas yang diamati saat pengujian dengan Microsoft Edge Chromium 78.
Elektron
Versi Electron mencakup versi Chromium yang lebih lama. Misalnya, versi Electron yang digunakan oleh Microsoft Teams adalah Chromium 66, yang menunjukkan perilaku yang lebih lama. Lakukan pengujian kompatibilitas Anda sendiri dengan versi Electron yang digunakan produk Anda. Untuk informasi selengkapnya, lihat Mendukung browser yang lebih lama.
Mendukung browser yang lebih lama
Standar 2016 SameSite mengamanatkan bahwa nilai yang tidak diketahui diperlakukan sebagai SameSite=Strict nilai. Akibatnya, setiap browser lama yang mendukung standar asli dapat rusak ketika mereka melihat SameSite properti dengan nilai None. Aplikasi web harus menerapkan sniffing browser jika ingin mendukung browser lama ini. ASP.NET Core tidak menerapkan sniffing browser untuk Anda karena User-Agent nilai header permintaan sangat tidak stabil dan berubah setiap minggu. Sebagai gantinya, titik ekstensi dalam kebijakan cookie memungkinkan Anda untuk menambahkan User-Agentlogika -spesifik.
Di Startup.cs, tambahkan kode berikut:
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
}
Sakelar penolakan
Sakelar Microsoft.AspNetCore.SuppressSameSiteNone kompatibilitas memungkinkan Anda untuk memilih keluar sementara dari perilaku cookie ASP.NET Core baru. Tambahkan JSON berikut ke file runtimeconfig.template.json di proyek Anda:
{
"configProperties": {
"Microsoft.AspNetCore.SuppressSameSiteNone": "true"
}
}
Versi Lain
Patch SameSite terkait akan datang untuk:
- ASP.NET Core 2.1, 2.2, dan 3.0
-
Microsoft.Owin4.1 -
System.Web(untuk .NET Framework 4.7.2 dan yang lebih baru)
Kategori
ASP.NET
API yang terpengaruh
- 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
Penyebaran
Jalur host x86 pada Windows 64-bit
MSBuild
Compilasi saat desain hanya memberikan referensi paket utama.
Mulai dari .NET Core SDK 3.1.400, hanya referensi paket tingkat atas yang dikembalikan oleh RunResolvePackageDependencies target.
Versi yang diperkenalkan
.NET Core SDK 3.1.400
Ubah deskripsi
Dalam versi .NET Core SDK sebelumnya, RunResolvePackageDependencies target membuat item MSBuild berikut yang berisi informasi dari file aset NuGet:
PackageDefinitionsPackageDependenciesTargetDefinitionsFileDefinitionsFileDependencies
Data ini digunakan oleh Visual Studio untuk mengisi simpul Dependensi di Penjelajah Solusi. Namun, itu bisa menjadi sejumlah besar data, dan data tidak diperlukan kecuali simpul Dependensi diperluas.
Mulai dari .NET Core SDK versi 3.1.400, sebagian besar item ini tidak dihasilkan secara default. Hanya item jenis Package yang dikembalikan. Jika Visual Studio memerlukan item untuk mengisi simpul Dependensi, visual Studio akan membaca informasi langsung dari file aset.
Alasan perubahan
Perubahan ini diperkenalkan untuk meningkatkan performa beban solusi di dalam Visual Studio. Sebelumnya, semua referensi paket akan dimuat, yang melibatkan pemuatan banyak referensi yang tidak akan pernah dilihat sebagian besar pengguna.
Tindakan yang direkomendasikan
Jika Anda memiliki logika MSBuild yang bergantung pada bahwa item ini sudah dibuat, atur properti EmitLegacyAssetsFileItems ke true dalam file proyek Anda. Pengaturan ini memungkinkan perilaku sebelumnya ketika semua elemen dibuat.
Kategori
MSBuild
API yang terpengaruh
Tidak tersedia
SDK
Manifes alat-alat di direktori akar
Formulir Windows
Kontrol yang dihapus
Mulai dari .NET Core 3.1, beberapa kontrol Windows Forms tidak lagi tersedia.
Ubah deskripsi
Dimulai dengan .NET Core 3.1, berbagai kontrol Windows Forms tidak lagi tersedia. Kontrol penggantian yang memiliki desain dan dukungan yang lebih baik diperkenalkan dalam .NET Framework 2.0. Kontrol yang tidak digunakan lagi sebelumnya dihapus dari kotak alat perancang tetapi masih tersedia untuk digunakan.
Jenis berikut ini tidak lagi tersedia:
- 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
Versi yang diperkenalkan
3.1
Tindakan yang direkomendasikan
Setiap kontrol yang dihapus memiliki kontrol penggantian yang direkomendasikan. Lihat tabel berikut ini:
| Kontrol (API) yang dihapus | Penggantian yang direkomendasikan | API terkait yang dihapus |
|---|---|---|
| Menu Konteks | ContextMenuStrip | |
| DataGrid | DataGridView | DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType |
| Menu Utama | MenuStrip | |
| Daftar Pilihan | ToolStripDropDown, ToolStripDropDownMenu | KoleksiItemMenu |
| Item Menu | ToolStripMenuItem | |
| Bilah Alat | ToolStrip | Tampilan Toolbar |
| Tombol Bilah Alat | ToolStripButton | ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign |
Kategori
Formulir Windows
API yang terpengaruh
- 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
Peristiwa CellFormatting tidak dipicu jika tooltip ditampilkan
DataGridView sekarang memperlihatkan tooltip teks dan kesalahan pada sel ketika kursor diarahkan dan saat dipilih melalui keyboard. Jika tooltip ditampilkan, peristiwa DataGridView.CellFormatting tidak dipicu.
Ubah deskripsi
Sebelum .NET Core 3.1, DataGridView yang memiliki properti ShowCellToolTips diatur ke true akan memperlihatkan tooltip untuk teks dan kesalahan pada sel ketika kursor diarahkan ke sel tersebut. Tooltip tidak muncul ketika sel dipilih menggunakan keyboard (misalnya, dengan menggunakan tombol Tab, pintasan keyboard, atau navigasi panah). Jika pengguna mengedit sel, lalu, saat DataGridView masih dalam mode edit, menggerakkan kursor ke sel yang tidak memiliki properti ToolTipText yang diatur, peristiwa CellFormatting dijalankan untuk memformat teks sel agar ditampilkan.
Untuk memenuhi standar aksesibilitas, mulai dari .NET Core 3.1, DataGridView yang memiliki properti ShowCellToolTips diatur ke true menampilkan tooltip untuk teks sel dan kesalahan tidak hanya ketika penunjuk diarahkan ke sel, tetapi juga ketika dipilih menggunakan keyboard. Sebagai konsekuensi dari perubahan ini, peristiwa CellFormattingtidak dinaikkan ketika sel yang tidak memiliki kumpulan properti ToolTipText diarahkan saat DataGridView dalam mode edit. Peristiwa tidak dipicu karena konten sel saat melayang ditampilkan sebagai tooltip alih-alih ditampilkan dalam sel.
Versi yang diperkenalkan
3.1
Tindakan yang direkomendasikan
Refaktor kode apa pun yang tergantung pada event CellFormatting saat DataGridView sedang dalam mode edit.
Kategori
Formulir Windows
API yang terpengaruh
Tidak ada