.NET Core 3,1 'deki son değişiklikler

.net Core veya ASP.NET Core sürüm 3,1 ' e geçiş yapıyorsanız, bu makalede listelenen son değişiklikler uygulamanızı etkileyebilir.

ASP.NET Core

HTTP: Browser SameSite değişikliklerinin etkisi kimlik doğrulaması

Chrome ve Firefox gibi bazı tarayıcılar, tanımlama bilgileri için uygulamalarında önemli değişiklikler yaptı SameSite . Değişiklikler OpenID Connect ve WS-Federation gibi uzak kimlik doğrulama senaryolarını etkiler ve bu, göndermesi tarafından kabul etmelidir SameSite=None . Ancak, SameSite=None iOS 12 ve diğer tarayıcıların bazı eski sürümlerinde kesilir. Uygulamanın bu sürümleri algılaması ve atlama yapması gerekir SameSite .

Bu sorunla ilgili tartışmak için bkz. DotNet/aspnetcore # 14996.

Sunulan sürüm

3,1 Preview 1

Eski davranış

SameSite , HTTP tanımlama bilgilerine yönelik 2016 taslak standart uzantısıdır. Siteler arası Istek sahteciliği 'nin (CSRF) azaltılmasına yöneliktir. Bu, başlangıçta yeni parametreler ekleyerek sunucuların kabul etmesinin tercih edildiği bir özellik olarak tasarlanmıştır. ASP.NET Core 2,0 için başlangıç desteği eklendi SameSite .

Yeni davranış

Google, geriye doğru uyumlu olmayan yeni bir taslak standardı önerdi. Standart varsayılan modu olarak değiştirir ve geri Lax çevirmek için yeni bir giriş ekler None . Lax çoğu uygulama tanımlama bilgisi için yeterli olacaktır; ancak, openıd Connect ve WS-Federation oturum açma gibi siteler arası senaryoları keser. İsteğin akışlarına yönelik farklılıklar nedeniyle çoğu OAuth oturum açma işlemleri 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 Updates .

ASP.NET Core 3,1, yeni davranışı uygulamak için güncelleştirilmiştir SameSite . Güncelleştirme, öğesinin davranışını yeniden tanımlar SameSiteMode.None SameSite=None ve SameSiteMode.Unspecified özniteliği atlamak için yeni bir değer ekler SameSite . UnspecifiedTanımlama bilgilerini kullanan bazı bileşenler, OpenID Connect bağıntı ve nonce tanımlama bilgileri gibi senaryolarına daha belirgin bir şekilde değer ayarlamış olsa da, tüm tanımlama bilgisi API 'leri için varsayılan olarak ' i

Bu alandaki diğer son değişiklikler için bkz. http: bazı tanımlama bilgisi SameSite Varsayılanları None olarak değiştirildi. ASP.NET Core 3,0 ' de, çoğu varsayılan SameSiteMode.Lax olarak olarak değiştirilmiştir SameSiteMode.None (ancak yine de önceki standart kullanılarak).

Değişiklik nedeni

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

Üçüncü taraf oturum açma gibi uzak sitelerle etkileşim kuran uygulamalar şunlar gerekir:

  • Bu senaryoları birden çok tarayıcıda test edin.
  • Daha eski tarayıcıları desteklemekiçin açıklanan tanımlama bilgisi İlkesi tarayıcı algılaması risk azaltma ' yı uygulayın.

Test ve tarayıcı algılama yönergeleri için aşağıdaki bölüme bakın.

Etkilenip etkilenmediğini belirleme

Yeni davranışı kabul eden bir istemci sürümünü kullanarak Web uygulamanızı test edin. Chrome, Firefox ve Microsoft Edge Bermium tümünde test için kullanılabilecek yeni bir katılım özelliği bayrakları vardır. 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ı elde. Bu sürümlerin yerinde geçici bir risk azaltma ve iki dakikadan daha eski tanımlama bilgilerine izin verme. Uygun test bayrakları etkinken, Chrome 76 ve 77 daha doğru sonuçlar elde edin. Yeni davranışı test etmek için, etkin ' e geçiş yapın chrome://flags/#same-site-by-default-cookies . Chrome 75 ve öncesi, yeni ayar ile başarısız olarak bildirilir None . Daha fazla bilgi için bkz. eski tarayıcıları destekleme.

Google, eski Chrome sürümlerini kullanılabilir hale getirir. Ancak, test için yeterli olacak şekilde, Kmıum 'un eski sürümlerini indirebilirsiniz. Kmıum indirmebölümündeki yönergeleri izleyin.

Safari

Safari 12, önceki taslağı kesin olarak uyguladık ve tanımlama bilgilerinde yeni değeri görütüyse başarısız olur None . Bu, eski tarayıcıları desteklemebölümünde gösterilen tarayıcı algılama kodu aracılığıyla kaçınılmalıdır. Safari 12 ve 13 ' ün yanı sıra, Microsoft kimlik doğrulama kitaplığı (MSAL), Active Directory Authentication Library (ADAL) veya kullandığınız kitaplığı kullanarak WebKit tabanlı, işletim sistemi stili oturum açma işlemlerini de test edin. Sorun, temel alınan işletim sistemi sürümüne bağımlıdır. OSX Mojave 10,14 ve iOS 12 ' nin yeni davranışla uyumluluk sorunlarına sahip olduğu bilinmektedir. OSX Catalina 10,15 veya iOS 13 ' e yükseltmek sorunu düzeltir. Safari 'nin şu anda yeni belirtim davranışını test etmek için bir katılım bayrağı yoktur.

Firefox

Yeni standart için Firefox desteği, sürüm 68 ve üzeri sürümlerde, özellik bayrağıyla sayfada yeniden çalıştırılarak test edilebilir about:config network.cookie.sameSite.laxByDefault . Firefox 'un eski sürümlerinde uyumluluk sorunları bildirilmemiştir.

Microsoft Edge

Microsoft Edge, SameSite sürüm 44 itibariyle eski standardı desteklese de, yeni standart ile herhangi bir uyumluluk sorununa sahip değildir.

Microsoft Edge Kmuum

Özellik bayrağı edge://flags/#same-site-by-default-cookies . Microsoft Edge Kmıum 78 ile test edilirken hiçbir uyumluluk sorunu gözlemlenmedi.

Tron

Elektron sürümleri, daha eski bir Kmıum sürümlerini içerir. Örneğin, Microsoft ekipleri tarafından kullanılan elektron sürümü, eski davranışı gösteren Kmıum 66 ' dir. Ü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 Standart uygulanan, bilinmeyen değerler değer olarak değerlendirilir SameSite=Strict . Sonuç olarak, özgün standardı destekleyen eski tarayıcılar, değeri olan bir özellik görtiklerinde kesintiye uğramayabilir SameSite None . Web uygulamaları, bu eski tarayıcıları desteklemeyi amaçlarsa tarayıcı algılaması gerçekleştirmelidir. ASP.NET Core, User-Agent istek üst bilgisi değerleri son derece kararsız olduğundan ve haftalık olarak değişeceğinden sizin için tarayıcı algılaması uygulamaz. Bunun yerine, tanımlama bilgisi ilkesindeki bir uzantı noktası, özel bir mantığı eklemenize olanak tanır User-Agent .

Startup. cs dosyasında 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
}
Kabul etme anahtarları

Microsoft.AspNetCore.SuppressSameSiteNoneUyumluluk anahtarı, yeni ASP.NET Core tanımlama bilgisi davranışının geçici olarak devre dışı kalmanızı sağlar. Aşağıdaki JSON öğesini projenizdeki bir dosyaya runtimeconfig.template.js ekleyin:

{
  "configProperties": {
    "Microsoft.AspNetCore.SuppressSameSiteNone": "true"
  }
}
Diğer sürümler

İlgili SameSite düzeltme eklerine şu şekilde katılın:

  • ASP.NET Core 2,1, 2,2 ve 3,0
  • Microsoft.Owin 4,1
  • System.Web (.NET Framework 4.7.2 ve üzeri)

Kategori

ASP.NET

Etkilenen API’ler


MSBuild

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

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

Sunulan sürüm

.NET Core SDK 3.1.400

Açıklamayı Değiştir

.NET Core SDK önceki sürümlerinde, RunResolvePackageDependencies hedef, NuGet varlıkları dosyasından bilgi içeren aşağıdaki MSBuild öğelerini oluşturdu:

  • PackageDefinitions
  • PackageDependencies
  • TargetDefinitions
  • FileDefinitions
  • FileDependencies

Bu veriler, Çözüm Gezgini içindeki bağımlılıklar düğümünü doldurmak için Visual Studio tarafından kullanılır. Ancak, bu büyük miktarda veri olabilir ve bağımlılıklar düğümü genişletilmediği takdirde veriler gerekli değildir.

.NET Core SDK sürüm 3.1.400 başlayarak, bu öğelerin çoğu varsayılan olarak oluşturulmaz. Yalnızca türündeki öğeler Package döndürülür. Visual Studio 'Nun bağımlılıklar düğümünü doldurması gerekiyorsa, bilgileri doğrudan varlıklar dosyasından okur.

Değişiklik nedeni

Bu değişiklik, Visual Studio 'nun içindeki çözüm yükleme performansını geliştirmek için sunulmuştur. Daha önce, çoğu kullanıcının hiçbir şekilde görüntüleyememesi gereken birçok başvuruyu yükleyen tüm paket başvuruları yüklenecektir.

Oluşturulmakta olan bu öğelere bağlı MSBuild EmitLegacyAssetsFileItems mantığınıza sahipseniz, özelliği true proje dosyanızda olarak ayarlayın. Bu ayar, tüm öğelerin oluşturulduğu önceki davranışa izin vermez.

Kategori

MSBuild

Etkilenen API’ler

Yok


Windows Forms

Kaldırılan denetimler

.NET Core 3,1 ' den başlayarak bazı Windows Forms denetimleri artık kullanılamaz.

Açıklamayı Değiştir

.NET Core 3,1 ile başlayarak, çeşitli Windows Forms denetimleri artık kullanılamaz. Daha iyi tasarım ve destek içeren değiştirme denetimleri .NET Framework 2,0 ' de sunulmuştur. Kullanım dışı bırakılan denetimler daha önce Tasarımcı araç kutularından kaldırılmıştır ancak yine de kullanılabilir.

Aşağıdaki türler artık kullanılamaz:

Sunulan sürüm

3,1

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

Kaldırılan denetim (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 MenuItemCollection
MenuItem ToolStripMenuItem
ToolBar ToolStrip Araç Barappearance
ToolBarButton ToolStripButton Toolbarbuttonkerkeventargs, Toolbarbuttonclick Kerkeventhandler, ToolBarButtonStyle, ToolBarTextAlign

Kategori

Windows Forms

Etkilenen API’ler


Araç ipucu gösterildiğinde CellFormatting olayı oluşturulmaz

DataGridViewŞimdi bir fare ve klavye aracılığıyla seçildiğinde bir hücrenin metin ve hata araç ipuçlarını gösterir. Bir araç ipucu gösteriliyorsa, DataGridView.CellFormatting olay oluşturulmaz.

Açıklamayı Değiştir

.NET Core 3,1 ' den önce, DataGridView ShowCellToolTips özelliği, true hücrenin bir fare tarafından nasıl ele alındığı zaman bir hücrenin metin ve hataları için bir araç ipucu gösterilmişti olarak ayarlanmıştır. Klavye aracılığıyla bir hücre seçildiğinde araç ipuçları gösterilmez (örneğin, sekme tuşunu, kısayol tuşlarını veya ok gezintisini kullanarak). Kullanıcı bir hücreyi düzenlediyseniz ve sonra DataGridView hala düzenleme modundayken, özelliği ayarlanmış olmayan bir hücrenin üzerine gelindiğinde, hücrede ToolTipText CellFormatting görüntülenecek hücre metnini biçimlendirmek için bir olay harekete geçirildi.

.NET Core 3,1 ' den başlayarak erişilebilirlik standartlarını karşılamak için, özelliği, bir DataGridView ShowCellToolTips true hücrenin metin ve hataları yalnızca hücre üzerine gelindiğinde değil, ancak klavye aracılığıyla seçilme durumunda olmayan bir hücrenin metin ve hatalarının araç ipuçlarını gösterir. Bu değişikliğin bir sonucu olarak, CellFormatting özellik kümesi olmayan hücreler not ToolTipText düzenleme modunda olduğunda olay oluşturulmaz DataGridView . Vurgulanan hücrenin içeriği hücrede görüntülenmek yerine bir araç ipucu olarak gösterildiğinden olay oluşturulmaz.

Sunulan sürüm

3,1

CellFormattingDüzenleme modundayken olaya bağlı tüm kodu DataGridView yeniden düzenleyin.

Kategori

Windows Forms

Etkilenen API’ler

Yok