Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
.NET Core veya ASP.NET Core'un 3.1 sürümüne geçiş yapıyorsanız, bu makalede listelenen büyük değişiklikler uygulamanızı etkileyebilir.
ASP.NET Çekirdeği
HTTP: Tarayıcı SameSite değişiklikleri kimlik doğrulamayı etkiler
Chrome ve Firefox gibi bazı tarayıcılar, çerezlerin SameSite uygulanışında uyumsuz değişiklikler yaptı. Değişiklikler, OpenID Connect ve WS-Federation gibi uzak kimlik doğrulama senaryolarını etkiler ve bu senaryolar SameSite=None gönderilerek devre dışı bırakılmak zorundadır. Ancak, SameSite=None iOS 12'de ve diğer tarayıcıların bazı eski sürümlerinde kesintiler olur. Uygulamanın bu sürümleri algılayıp SameSite atlaması gerekir.
Bu sorunla ilgili tartışma için bkz. dotnet/aspnetcore#14996.
Sürüm kullanıma sunulmuştur
3.1 Önizleme 1
Eski davranış
SameSite, HTTP çerezleri için 2016 taslak standart uzantısıdır. Siteler Arası İstek Sahteciliğini (CSRF) azaltmaya yöneliktir. Bu, başlangıçta sunucuların yeni parametreleri ekleyerek kabul edecekleri bir özellik olarak tasarlanmıştır. ASP.NET Core 2.0 için SameSiteilk destek eklendi.
Yeni davranış
Google geriye dönük uyumlu olmayan yeni bir taslak standardı önerdi. Standart, varsayılan modu Lax olarak değiştirir ve devre dışı bırakmak için yeni bir giriş None ekler. Lax çoğu uygulama çerezi için yeterlidir; ancak OpenID Connect ve WS-Federation oturum açma gibi siteler arası senaryoları bozar. OAuth oturum açma bilgilerinin çoğu, isteğin akışındaki farklılıklar nedeniyle etkilenmez. Yeni None parametre, önceki taslak standardını uygulayan istemcilerle uyumluluk sorunlarına neden olur (örneğin, iOS 12). Chrome 80 değişiklikleri içerir. Bkz. Chrome ürün başlatma zaman çizelgesi için SameSite Güncelleştirmeleri .
ASP.NET Core 3.1, yeni SameSite davranışı uygulayacak şekilde güncelleştirildi. Güncelleme, SameSiteMode.None davranışını SameSite=None üretmek üzere yeniden tanımlar ve SameSiteMode.Unspecified özniteliğini dışlamak için yeni bir SameSite değeri ekler. Çerez kullanan bazı bileşenler OpenID Connect bağıntısı ve nonce çerezleri gibi durumlarına daha özel değerler ayarlasa da, tüm çerez API'leri artık varsayılan Unspecified olarak kullanılmaktadır.
Bu alandaki diğer son değişiklikler için HTTP: Bazı çerez SameSite varsayılanları 'None' olarak değiştirildi konusuna bakın. ASP.NET Core 3.0'da çoğu varsayılan değer olarak SameSiteMode.LaxSameSiteMode.None değiştirildi (ancak önceki standart kullanılıyordu).
Değişiklik nedeni
Tarayıcı ve belirtim değişiklikleri, önceki metinde belirtildiği gibi.
Önerilen eylem
Uzak sitelerle, üçüncü taraf oturum açma gibi, etkileşim kuran uygulamaların şunları yapması gerekir:
- Bu senaryoları birden çok tarayıcıda test edin.
- Eski tarayıcıları destekleme bölümünde açıklanan tanımlama bilgisi ilkesi ile tarayıcı algılama azaltımını uygulayın.
Test ve tarayıcı algılama yönergeleri için aşağıdaki bölüme bakın.
Etkilenip etkilenmeyeceğini belirleme
Yeni davranışı kabul eden bir istemci sürümü kullanarak web uygulamanızı test edin. Chrome, Firefox ve Microsoft Edge Chromium'un tümü test için kullanılabilecek yeni kabul etme özelliği bayraklarına sahiptir. Düzeltme eklerini uyguladıktan sonra uygulamanızın eski istemci sürümleriyle uyumlu olduğunu doğrulayın( özellikle Safari). Daha fazla bilgi için bkz . Eski tarayıcıları destekleme.
Krom
Chrome 78 ve üzeri, yanıltıcı test sonuçları verir. Bu sürümlerin geçici bir önlemi vardır ve iki dakikadan daha kısa süreli tanımlama bilgilerine izin verir. Uygun test bayrakları etkinleştirildiğinde Chrome 76 ve 77 daha doğru sonuçlar verir. Yeni davranışı test etmek için etkin seçeneğine geçin chrome://flags/#same-site-by-default-cookies . Chrome 75 ve önceki sürümlerin yeni None ayarda başarısız olduğu bildirilir. Daha fazla bilgi için bkz . Eski tarayıcıları destekleme.
Google, eski Chrome sürümlerini kullanıma sunmuyor. Ancak test için yeterli olacak eski Chromium sürümlerini indirebilirsiniz. Chromium'u İndirme başlığındaki yönergeleri izleyin.
Safari
Safari 12, önceki taslağı katı bir şekilde uyguladı ve çerezlerde yeni None değeri görürse başarısız olmaktadır. Bu, Eski tarayıcıları destekleme bölümünde gösterilen tarayıcı algılama kodu aracılığıyla önlenmelidir. Safari 12 ve 13'e ek olarak Microsoft Kimlik Doğrulama Kitaplığı (MSAL), Active Directory Kimlik Doğrulama Kitaplığı (ADAL) veya kullandığınız kitaplığı kullanarak WebKit tabanlı, işletim sistemi stili oturum açma bilgilerini test edin. Sorun, temel işletim sistemi sürümüne bağlıdır. OSX Mojave 10.14 ve iOS 12'nin yeni davranışla uyumluluk sorunları olduğu bilinmektedir. OSX Catalina 10.15 veya iOS 13 sürümüne yükseltme sorunu düzeltir. Safari şu anda yeni belirtim davranışını test etmek için bir kabul bayrağına sahip değildir.
Firefox
Yeni standart için Firefox desteği, sürüm 68 ve sonrasındaki about:config sayfasında özellik bayrağı network.cookie.sameSite.laxByDefault etkinleştirilerek test edilebilir. Firefox'un eski sürümlerinde uyumluluk sorunu bildirilmemiştir.
Microsoft Edge
Microsoft Edge eski SameSite standardı desteklese de, sürüm 44 itibarıyla yeni standartla ilgili herhangi bir uyumluluk sorunu yaşamadı.
Microsoft Edge Chromium
Özellik bayrağı, edge://flags/#same-site-by-default-cookies'dir. Microsoft Edge Chromium 78 ile test edilirken hiçbir uyumluluk sorunu gözlemlenmedi.
Elektron
Electron sürümleri Chromium'un eski sürümlerini içerir. Örneğin, Microsoft Teams tarafından kullanılan Electron sürümü, eski davranışları gösteren Chromium 66'dır. Ürününüzün kullandığı Elektron sürümüyle kendi uyumluluk testinizi gerçekleştirin. Daha fazla bilgi için bkz . Eski tarayıcıları destekleme.
Eski tarayıcıları destekleme
2016 SameSite standardı, bilinmeyen değerlerin SameSite=Strict değerleri olarak ele alınmasını zorunlu kıldı. Sonuç olarak, özgün standardı destekleyen tüm eski tarayıcılar, bir SameSite özelliğinin None değerine sahip olması durumunda bozulabilir. Web uygulamaları, bu eski tarayıcıları desteklemeyi amaçlıyorsa tarayıcı algılamayı uygulamalıdır. ASP.NET Core, User-Agent talep üstbilgi değerleri son derece kararsız olduğundan ve haftalık olarak değiştiği için tarayıcı algılamayı uygulamaz. Bunun yerine, tanımlama bilgisi ilkesindeki bir uzantı noktası, User-Agent ile ilgili mantık eklemenize olanak tanır.
Startup.cs aşağıdaki kodu ekleyin:
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
}
Devre dışı bırakma anahtarları
Uyumluluk anahtarı, Microsoft.AspNetCore.SuppressSameSiteNone yeni ASP.NET Core tanımlama bilgisi davranışını kullanmamayı geçici olarak seçmenizi sağlar. Projenizdeki bir runtimeconfig.template.json dosyasına aşağıdaki JSON dosyasını ekleyin:
{
"configProperties": {
"Microsoft.AspNetCore.SuppressSameSiteNone": "true"
}
}
Diğer Sürümler
İlgili SameSite düzeltme ekleri şunlar için kullanıma sunulacaktır:
- ASP.NET Core 2.1, 2.2 ve 3.0
-
Microsoft.Owin4.1 -
System.Web(.NET Framework 4.7.2 ve üzeri için)
Kategori
ASP.NET
Etkilenen API'ler
- 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
Dağıtım
64-bit Windows'ta x86 ana bilgisayar yolu
MSBuild
Tasarım aşaması derlemeleri yalnızca en üst düzey paket referanslarını döndürür
.NET Core SDK 3.1.400'den itibaren, RunResolvePackageDependencies hedefi yalnızca en üst düzey paket başvurularını döndürür.
Sürüm kullanıma sunulmuştur
.NET Core SDK 3.1.400
Açıklamayı değiştir
.NET Core SDK'sının önceki sürümlerinde hedef, RunResolvePackageDependencies NuGet varlıkları dosyasından bilgi içeren aşağıdaki MSBuild öğelerini oluşturmuştur:
PackageDefinitionsPackageDependenciesTargetDefinitionsFileDefinitionsFileDependencies
Bu veriler Visual Studio tarafından Çözüm Gezgini'ndeki Bağımlılıklar düğümünü doldurmak için kullanılır. Ancak, bu büyük miktarda veri olabilir ve Bağımlılıklar düğümü genişletilmediği sürece verilere ihtiyaç duyulmaz.
.NET Core SDK sürüm 3.1.400'den başlayarak, bu öğelerin çoğu varsayılan olarak oluşturulmaz. Yalnızca türdeki Package öğeler döndürülür. Visual Studio Bağımlılıklar düğümünü doldurmak için öğelere ihtiyaç duyuyorsa, bilgileri doğrudan varlıklar dosyasından okur.
Değişiklik nedeni
Bu değişiklik, Visual Studio'nun içindeki çözüm yükü performansını geliştirmek için kullanıma sunulmuştur. Daha önce, çoğu kullanıcının asla görüntülemeyeceği çok sayıda başvurunun yüklenmesini içeren tüm paket başvuruları yüklenirdi.
Önerilen eylem
MSBuild mantığınız oluşturulan bu öğelere bağlıysa, proje dosyanızda EmitLegacyAssetsFileItems özelliğini true olarak ayarlayın. Bu ayar, tüm öğelerin oluşturulduğu önceki davranışı etkinleştirir.
Kategori
MSBuild
Etkilenen API'ler
Mevcut Değil
SDK
Kök klasördeki araç bildirimleri
Windows Forms
Denetimler kaldırıldı
.NET Core 3.1'den başlayarak, bazı Windows Forms denetimleri artık kullanılamaz.
Açıklamayı değiştir
.NET Core 3.1'den başlayarak, çeşitli Windows Forms denetimleri artık kullanılamaz. .NET Framework 2.0'da daha iyi tasarıma ve desteğe sahip değiştirme denetimleri kullanıma sunulmuştur. Kullanım dışı bırakılan denetimler daha önce tasarımcı araç kutularından kaldırılmıştı ancak hala kullanılabilir durumdaydı.
Aşağıdaki türler artık kullanılamaz:
- 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
Sürüm kullanıma sunulmuştur
3.1
Önerilen eylem
Kaldırılan her denetim için önerilen bir değiştirme denetimi mevcuttur. Aşağıdaki tabloya bakın:
| Kontrol kaldırıldı (API) | Önerilen değişiklik | Kaldırılan ilişkili API'ler |
|---|---|---|
| Bağlam Menüsü | "ContextMenuStrip" | |
| DataGrid | VeriTablosuGörüntüleyici | DataGridCell, DataGridRow, DataGridTabloKoleksiyonu, DataGridSütunKoleksiyonu, DataGridTabloStili, DataGridSütunStili, DataGridSatırStili, DataGridAnaSatırlarEtiketi, DataGridAnaSatırlarEtiketiStili, DataGridBoolSütunu, DataGridMetinKutusu, SütunStilleriKoleksiyonu, TabloStilleriKoleksiyonu, HitTestTürü |
| Ana Menü | Menü Çubuğu | |
| Menü | ToolStripDropDown, ToolStripDropDownMenu | Menü Öğesi Koleksiyonu |
| Menü Öğesi | ToolStripMenuItem (Araç Çubuğu Menü Öğesi) | |
| Araç çubuğu | ToolStrip | Araç Çubuğu Görünümü |
| Araç Çubuğu Düğmesi | ToolStripButton (Araç Çubuğu Düğmesi) | ToolBarButtonClickEventArgs (Araç Çubuğu Düğme Tıklama Olayları), ToolBarButtonClickEventHandler (Araç Çubuğu Düğme Tıklama Olay Yöneticisi), ToolBarButtonStyle (Araç Çubuğu Düğme Stili), ToolBarTextAlign (Araç Çubuğu Metin Hizalaması) |
Kategori
Windows Forms
Etkilenen API'ler
- 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
Araç ipucu gösteriliyorsa CellFormatting olayı tetiklenmiyor
DataGridView artık bir hücrede fareyle gezinildiğinde ve klavyeyle seçildiğinde hücrenin metin ve hata araç ipuçlarını gösterir. Bir ipucu gösterildiğinde DataGridView.CellFormatting olayı tetiklenmez.
Açıklamayı değiştir
.NET Core 3.1'in öncesinde, DataGridView özelliği ShowCellToolTips olarak ayarlanmış bir true, hücreye fareyle gelindiğinde hücrenin metni ve hatalarına dair bir araç ipucu gösterirdi. Klavye aracılığıyla bir hücre seçildiğinde araç ipuçları gösterilmedi (örneğin, Sekme tuşu, kısayol tuşları veya ok gezintisi kullanılarak). Kullanıcı bir hücreyi düzenlemişse ve DataGridView hala düzenleme modundayken, ToolTipText özelliği ayarlanmamış bir hücrenin üzerine gelindiyse, hücrenin metnini hücrede görüntülenmek üzere biçimlendirmek için bir CellFormatting olayı tetiklendi.
.NET Core 3.1'den itibaren, erişilebilirlik standartlarını karşılamak amacıyla, DataGridView özelliği ShowCellToolTips olarak ayarlanmış bir true, yalnızca hücrenin üzerine gelindiğinde değil, aynı zamanda klavye ile seçildiğinde de hücre metni ve hataları için araç ipuçlarını gösterir. Bu değişikliğin bir sonucu olarak, CellFormatting tetiklenmez. Vurgulanan hücrenin içeriği hücrede görüntülenmek yerine araç ipucu olarak gösterildiğinden olay tetiklenmez.
Sürüm kullanıma sunulmuştur
3.1
Önerilen eylem
CellFormatting düzenleme modundayken DataGridView olaya bağlı olan tüm kodları yeniden düzenleyin.
Kategori
Windows Forms
Etkilenen API'ler
Hiç kimse