İngilizce dilinde oku

Aracılığıyla paylaş


.NET Core 3.1'de hataya neden olan değişiklikler

.NET Core veya ASP.NET Core'un 3.1 sürümüne geçiriyorsanız, bu makalede listelenen hataya neden olan değişiklikler uygulamanızı etkileyebilir.

ASP.NET Core

HTTP: Tarayıcı SameSite değişiklikleri kimlik doğrulamayı etkiler

Chrome ve Firefox gibi bazı tarayıcılar, tanımlama bilgileri için uygulamalarında SameSite hataya neden olan değişiklikler yaptı. Değişiklikler, OpenID Bağlan ve WS-Federation gibi uzak kimlik doğrulama senaryolarını etkiler ve bu senaryolar gönderilerek SameSite=Nonedevre dışı bırakılmalıdı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ılaması ve atlanması SameSitegerekir.

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 tanımlama bilgileri 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 olarak Lax değiştirir ve geri çevirmek için yeni bir giriş None ekler. Lax Çoğu uygulama tanımlama bilgisi için yeterlidir; ancak OpenID Bağlan ve WS-Federation oturum açma bilgileri 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. Chrome ürün başlatma zaman çizelgesi için bkz. SameSite Güncelleştirmeler.

ASP.NET Core 3.1, yeni SameSite davranışı uygulayacak şekilde güncelleştirildi. Güncelleştirme, yayma SameSite=None davranışını SameSiteMode.None yeniden tanımlar ve özniteliğini atacak SameSite yeni bir değer SameSiteMode.Unspecified ekler. Tanımlama bilgisi kullanan bazı bileşenler OpenID Bağlan bağıntı ve nonce tanımlama bilgileri gibi senaryolarına daha özel değerler ayarlasa da, tüm tanımlama bilgisi API'leri artık varsayılan Unspecifiedolarak olarak ayarlanmıştır.

Bu alandaki diğer son değişiklikler için bkz . HTTP: Bazı tanımlama bilgisi SameSite varsayılanları Yok olarak değiştirildi. ASP.NET Core 3.0'da çoğu varsayılan değer olarak SameSiteMode.Lax SameSiteMode.None değiştirildi (ancak önceki standart kullanılıyordu).

Değişiklik nedeni

Tarayıcı ve belirtim, önceki metinde özetlenen şekilde değişir.

Üçüncü taraf oturum açma bilgileri gibi uzak sitelerle etkileşim kuran uygulamaların şunları gerçekleştirmesi gerekir:

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.

Chrome

Chrome 78 ve üzeri, yanıltıcı test sonuçları verir. Bu sürümlerin geçici bir azaltması vardır ve iki dakikadan 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ğı kesin olarak uyguladı ve tanımlama bilgilerinde yeni None değeri görürse başarısız oluyor. 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, özellik bayrağıyla network.cookie.sameSite.laxByDefaultsayfadan kabul edilerek sürüm 68 ve sonraki sürümlerde about:config 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ğı şeklindedir edge://flags/#same-site-by-default-cookies. Microsoft Edge Chromium 78 ile test edilirken hiçbir uyumluluk sorunu gözlemlenmedi.

Electron

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 değer olarak SameSite=Strict ele alındığını zorunlu kılındı. Sonuç olarak, özgün standardı destekleyen tüm eski tarayıcılar değerine Nonesahip bir SameSite özellik gördüklerinde bozulabilir. Web uygulamaları, bu eski tarayıcıları desteklemeyi amaçlıyorsa tarayıcı algılamayı uygulamalıdır. ASP.NET Core, istek üst bilgisi değerleri son derece kararsız olduğundan User-Agent ve haftalık olarak değiştiği için tarayıcı algılamayı uygulamaz. Bunun yerine, tanımlama bilgisi ilkesindeki bir uzantı noktası belirli bir mantık eklemenize User-Agentolanak 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 Çekirdek tanımlama bilgisi davranışını geçici olarak geri çevirmenizi 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.Owin 4.1
  • System.Web (.NET Framework 4.7.2 ve üzeri için)

Kategori

ASP.NET

Etkilenen API’ler


Dağıtım

64 bit Windows'ta x86 konak yolu

MSBuild

Tasarım zamanı derlemeleri yalnızca en üst düzey paket başvurularını döndürür

.NET Core SDK 3.1.400'den başlayarak, hedef tarafından RunResolvePackageDependencies yalnızca en üst düzey paket başvuruları döndürülür.

Sürüm kullanıma sunulmuştur

.NET Core SDK 3.1.400

Açıklama değiştirildi

.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:

  • PackageDefinitions
  • PackageDependencies
  • TargetDefinitions
  • FileDefinitions
  • FileDependencies

Bu veriler Visual Studio tarafından Çözüm Gezgini 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üleyemeyecekleri birçok başvuru yüklenmesini kapsayan tüm paket başvuruları yükleniyordu.

Önerilen eylem

Oluşturulan bu öğelere bağlı MSBuild mantığınız varsa, proje dosyanızda özelliğini olarak true ayarlayınEmitLegacyAssetsFileItems. Bu ayar, tüm öğelerin oluşturulduğu önceki davranışı etkinleştirir.

Kategori

MSBuild

Etkilenen API’ler

Yok


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çıklama değiştirildi

.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:

Sürüm kullanıma sunulmuştur

3.1

Önerilen eylem

Kaldırılan her denetimin önerilen bir değiştirme denetimi vardır. Aşağıdaki tabloya bakın:

Denetim kaldırıldı (API) Önerilen değiştirme Kaldırılan ilişkili API'ler
ContextMenu ContextMenuStrip
DataGrid Datagridview DataGridCell, DataGridRow, DataGridTableCollection, DataGridColumnCollection, DataGridTableStyle, DataGridColumnStyle, DataGridLineStyle, DataGridParentRowsLabel, DataGridParentRowsLabelStyle, DataGridBoolColumn, DataGridTextBox, GridColumnStylesCollection, GridTableStylesCollection, HitTestType
Mainmenu MenuStrip
Menü ToolStripDropDown, ToolStripDropDownMenu Menuıtemcollection
MenuItem Toolstripmenuıtem
ToolBar ToolStrip ToolBarAppearance
Toolbarbutton Toolstripbutton ToolBarButtonClickEventArgs, ToolBarButtonClickEventHandler, ToolBarButtonStyle, ToolBarTextAlign

Kategori

Windows Forms

Etkilenen API’ler


Araç ipucu gösteriliyorsa CellFormatting olayı tetiklenmiyor

DataGridView Artık bir farenin üzerine gelindiğinde ve klavye aracılığıyla seçildiğinde hücrenin metin ve hata araç ipuçlarını gösterir. Bir araç ipucu gösteriliyorsa, DataGridView.CellFormatting olay tetiklenmez.

Açıklama değiştirildi

.NET Core 3.1'in ShowCellToolTips öncesinde, DataGridView özelliği true bir hücrenin metni için bir araç ipucu ve fareyle üzerine gelindiğinde oluşan hatalar için araç ipucu gösterilmişti. 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 daha sonra düzenleme modundayken DataGridView , özelliği ayarlanmamış bir hücrenin ToolTipText üzerine gelindiğinde, hücrenin metnini hücrede görüntülenecek şekilde biçimlendirmek için bir CellFormatting olay tetiklendi.

.NET Core 3.1'den başlayarak, .trueNET Core 3.1'den başlayarak, ShowCellToolTips DataGridView bir hücrenin metni için araç ipuçlarını ve yalnızca hücre vurgulandığında değil, aynı zamanda klavye aracılığıyla seçildiğinde hataları gösteren bir erişilebilirlik standartlarını karşılamak için. Bu değişikliğin bir sonucu olarak, CellFormatting özelliği ayarlanmamış ToolTipText hücreler düzenleme modundayken DataGridView üzerine gelindiğinde olay 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

Düzenleme modundayken DataGridView olaya bağlı CellFormatting olan tüm kodları yeniden düzenleyin.

Kategori

Windows Forms

Etkilenen API’ler

Hiçbiri


Ayrıca bkz.