ASP.NET Core 2.1 MVC SameSite cookie örneği
ASP.NET Core 2.1, SameSite özniteliği için yerleşik desteğe sahiptir, ancak özgün standarda yazılmıştır. Düzeltme eki uygulanmış davranış, değerini hiç yaymak yerine değeriyle None
sameSite özniteliğini yaymak için değerini SameSite.None
değiştirdi. Değeri yaymak istemiyorsanız özelliğini cookie -1 olarak ayarlayabilirsinizSameSite
.
ASP.NET Core, veya OpenIdConnect
tümleştirme gibi IFrames
gelişmiş senaryolar dışında SameSite'lerden cookie büyük ölçüde etkilenmez.Identity
kullanırken Identity
hiçbir cookie sağlayıcı eklemeyin veya çağrısı services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
yapmayın, Identity
bu işlemle ilgilenir.
SameSite özniteliğini yazma
Aşağıda, bir üzerinde SameSite özniteliği yazma örneği verilmiştir cookie:
var cookieOptions = new CookieOptions
{
// Set the secure flag, which Chrome's changes will require for SameSite none.
// Note this will also require you to be running on HTTPS
Secure = true,
// Set the cookie to HTTP only which is good practice unless you really do need
// to access it client side in scripts.
HttpOnly = true,
// Add the SameSite attribute, this will emit the attribute with a value of none.
// To not emit the attribute at all set the SameSite property to (SameSiteMode)(-1).
SameSite = SameSiteMode.None
};
// Add the cookie to the response cookie collection
Response.Cookies.Append(CookieName, "cookieValue", cookieOptions);
Kimlik Doğrulaması ve Oturum Durumunu cookieAyarlama Cookie
Cookie kimlik doğrulaması, oturum durumu ve diğer çeşitli bileşenler , seçenekler aracılığıyla Cookie aynıSite seçeneklerini ayarlar, örneğin
services.AddAuthentication(CookieAuthenticationDefaults.AuthenticationScheme)
.AddCookie(options =>
{
options.Cookie.SameSite = SameSiteMode.None;
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
options.Cookie.IsEssential = true;
});
services.AddSession(options =>
{
options.Cookie.SameSite = SameSiteMode.None;
options.Cookie.SecurePolicy = CookieSecurePolicy.Always;
options.Cookie.IsEssential = true;
});
Önceki kodda hem kimlik doğrulaması hem de cookie oturum durumu aynıSite özniteliğini None
olarak ayarlar ve özniteliği bir None
değerle yayar ve secure özniteliğini true olarak ayarlar.
Örneği çalıştırma
Örnek projeyi çalıştırırsanız, tarayıcı hata ayıklayıcınızı ilk sayfaya yükleyin ve site koleksiyonunu cookie görüntülemek için kullanın. Edge ve Chrome'da bunu yapmak için sekmeye Application
basın F12
ve bölümdeki seçeneğin altındaki site URL'sine Cookies
Storage
tıklayın.
Yukarıdaki görüntüden, "SameSite CookieOluştur" düğmesine tıkladığınızda örnek tarafından oluşturulan öğesinin, örnek kodunda ayarlanan değerle eşleşen bir SameSite öznitelik değerine Lax
sahip olduğunu cookie görebilirsiniz.
Kesişenler cookie
S'lere müdahale cookieetmek için, kullanıcının tarayıcı aracısında desteğine göre hiçbiri değerini ayarlamak için ara yazılımı kullanmanız CookiePolicy
gerekir. Bu, içinde ConfigureServices()
s yazan cookieve yapılandırılan bileşenlerden önce http isteği işlem hattına yerleştirilmelidir.
İşlem hattına eklemek için Startup.cs dosyasındaki Configure(IApplicationBuilder, IHostingEnvironment)
yönteminde kullanınapp.UseCookiePolicy()
. Örnek:
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
}
else
{
app.UseExceptionHandler("/Home/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
app.UseSession();
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
ConfigureServices(IServiceCollection services)
Ardından, eklendiğinde veya silindiğinde cookieilkeyi cookie bir yardımcı sınıfa çağrılacak şekilde yapılandırın. Örnek:
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
options.OnAppendCookie = cookieContext =>
CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
options.OnDeleteCookie = cookieContext =>
CheckSameSite(cookieContext.Context, cookieContext.CookieOptions);
});
}
private void CheckSameSite(HttpContext httpContext, CookieOptions options)
{
if (options.SameSite == SameSiteMode.None)
{
var userAgent = httpContext.Request.Headers["User-Agent"].ToString();
if (SameSite.BrowserDetection.DisallowsSameSiteNone(userAgent))
{
options.SameSite = (SameSiteMode)(-1);
}
}
}
yardımcı işlevi CheckSameSite(HttpContext, CookieOptions)
:
- İstek sonuna eklendiğinde veya istekten silindiğinde cookieçağrılır.
- Özelliğin
SameSite
olarak ayarlandığınıNone
denetler. - olarak ayarlanırsa
SameSite
None
ve geçerli kullanıcı aracısının yok öznitelik değerini desteklemediği bilinmektedir. Denetim, SameSiteSupport sınıfı kullanılarak yapılır:- özelliğini olarak ayarlayarak değeri yaymayacak şekilde ayarlar
SameSite
(SameSiteMode)(-1)
- özelliğini olarak ayarlayarak değeri yaymayacak şekilde ayarlar
.NET Framework'ün hedeflenmesi
ASP.NET Core ve System.Web (ASP.NET 4.x), SameSite'nin bağımsız uygulamalarına sahiptir. .NET Framework için SameSite KB düzeltme ekleri, ASP.NET Core kullanılıyorsa gerekli değildir ve System.Web SameSite en düşük çerçeve sürümü gereksinimi (.NET Framework 4.7.2) ASP.NET Core için geçerli değildir.
.NET üzerinde ASP.NET Core, uygun düzeltmeleri almak için NuGet paket bağımlılıklarının güncelleştirilmesini gerektirir.
.NET Framework için ASP.NET Core değişikliklerini almak için, düzeltme eki uygulanmış paketlere ve sürümlere (2.1.14 veya üzeri 2.1 sürümleri) doğrudan başvuru aldığınızdan emin olun.
<PackageReference Include="Microsoft.Net.Http.Headers" Version="2.1.14" />
<PackageReference Include="Microsoft.AspNetCore.CookiePolicy" Version="2.1.14" />
Ek Bilgi
Chrome Güncelleştirmeler ASP.NET Core SameSite BelgeleriASP.NET Core 2.1 SameSite Değişiklik Duyurusu
ASP.NET Core
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin