ASP.NET Core'da AB Genel Veri Koruma Yönetmeliği (GDPR) desteği
Gönderen Rick Anderson
ASP.NET Core, AB Genel Veri Koruma Yönetmeliği (GDPR) gereksinimlerinin bazılarını karşılamaya yardımcı olacak API'ler ve şablonlar sağlar:
- Proje şablonları, gizlilik ve kullanım ilkenizle değiştirebileceğiniz uzantı noktalarını ve cookie saplı işaretlemeyi içerir.
- Sayfa
Pages/Privacy.cshtml
veyaViews/Home/Privacy.cshtml
görünüm, sitenizin gizlilik ilkesini ayrıntılı olarak görüntülemek için bir sayfa sağlar.
Geçerli ASP.NET Core şablonu tarafından oluşturulan bir uygulamada ASP.NET Core 2.2 şablonlarında bulunan gibi varsayılan cookie onay özelliğini etkinleştirmek için aşağıdaki vurgulanmış kodu öğesine Program.cs
ekleyin:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential
// cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Önceki kodda CookiePolicyOptions ve UseCookiePolicy kullanılır.
Dosyaya cookie kısmi
_Layout.cshtml
onay ekleyin:@*Previous markup removed for brevity*@ </header> <div class="container"> <partial name="_CookieConsentPartial" /> <main role="main" class="pb-3"> @RenderBody() </main> </div> <footer class="border-top footer text-muted"> <div class="container"> © 2022 - WebGDPR - <a asp-area="" asp-page="/Privacy">Privacy</a> </div> </footer> <script src="~/lib/jquery/dist/jquery.min.js"></script> <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script> <script src="~/js/site.js" asp-append-version="true"></script> @await RenderSectionAsync("Scripts", required: false) </body> </html>
_CookieConsentPartial.cshtml
Dosyayı projeye ekleyin:@using Microsoft.AspNetCore.Http.Features @{ var consentFeature = Context.Features.Get<ITrackingConsentFeature>(); var showBanner = !consentFeature?.CanTrack ?? false; var cookieString = consentFeature?.CreateConsentCookie(); } @if (showBanner) { <div id="cookieConsent" class="alert alert-info alert-dismissible fade show" role="alert"> Use this space to summarize your privacy and cookie use policy. <a asp-page="/Privacy">Learn More</a>. <button type="button" class="accept-policy close" data-bs-dismiss="alert" aria-label="Close" data-cookie-string="@cookieString"> <span aria-hidden="true">Accept</span> </button> </div> <script> (function () { var button = document.querySelector("#cookieConsent button[data-cookie-string]"); button.addEventListener("click", function (event) { document.cookie = button.dataset.cookieString; }, false); })(); </script> }
Onay özelliği hakkında cookie bilgi edinmek için bu makalenin ASP.NET Core 2.2 sürümünü seçin.
cookie Onay değerini özelleştirme
Kullanıcının özelliğini kullanarak CookiePolicyOptions.ConsentCookieValue
kullanım ilkesine onay verilip verirseniz izlemek için cookie kullanılan değeri belirtin:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
options.ConsentCookieValue = "true";
});
var app = builder.Build();
Bekleme sırasında şifreleme
Bazı veritabanları ve depolama mekanizmaları bekleme durumunda şifrelemeye olanak sağlar. Bekleyen şifreleme:
- Depolanan verileri otomatik olarak şifreler.
- Verilere erişen yazılım için yapılandırma, programlama veya başka bir çalışma olmadan şifreler.
- En kolay ve en güvenli seçenektir.
- Veritabanının anahtarları ve şifrelemeyi yönetmesine izin verir.
Örneğin:
- Microsoft SQL ve Azure SQL Saydam Veri Şifrelemesi (TDE) sağlar.
- SQL Azure veritabanını varsayılan olarak şifreler
- Azure Blobları, Dosyalar, Tablo ve Kuyruk Depolama varsayılan olarak şifrelenir.
Bekleyen yerleşik şifreleme sağlamayan veritabanları için aynı korumayı sağlamak için disk şifrelemesi kullanabilirsiniz. Örneğin:
Ek kaynaklar
- Proje şablonları, gizlilik ve kullanım ilkenizle değiştirebileceğiniz uzantı noktalarını ve cookie saplı işaretlemeyi içerir.
- Onay cookie özelliği, kullanıcılarınızdan kişisel bilgileri depolamak için onay istemenizi (ve izlemenizi) sağlar. Kullanıcı veri toplamayı onaylamadıysa ve uygulama olarak ayarlandıysa CheckConsentNeeded
true
, temel cookieolmayan öğeler tarayıcıya gönderilmez. - Cookies temel olarak işaretlenebilir. Temel cookiebilgiler, kullanıcı onay vermediğinde ve izleme devre dışı bırakıldığında bile tarayıcıya gönderilir.
- İzleme devre dışı bırakıldığında TempData ve Session cookie işlevleri çalışmaz.
- Yönet Identity sayfasında kullanıcı verilerini indirmek ve silmek için bir bağlantı sağlanır.
Örnek uygulama, ASP.NET Core 2.1 şablonlarına eklenen GDPR uzantı noktalarının ve API'lerin çoğunu test etmenizi sağlar. Test yönergeleri için BeniOku dosyasına bakın.
Örnek kodu görüntüleme veya indirme (indirme)
Şablon tarafından oluşturulan kodda Temel GDPR desteği ASP.NET
Razor Proje şablonlarıyla oluşturulan sayfalar ve MVC projeleri aşağıdaki GDPR desteğini içerir:
- CookiePolicyOptions ve UseCookiePolicy sınıfında ayarlanır
Startup
. - _ConsentPartial.cshtml kısmi görünümüCookie. Bu dosyaya Bir Kabul Et düğmesi eklenmiştir. Kullanıcı Kabul Et düğmesine tıkladığında, depolamaya cookieonay verilir.
- Sayfa
Pages/Privacy.cshtml
veyaViews/Home/Privacy.cshtml
görünüm, sitenizin gizlilik ilkesini ayrıntılı olarak görüntülemek için bir sayfa sağlar. _CookieConsentPartial.cshtml dosyası sayfaya Privacy bir bağlantı oluşturur. - Tek tek kullanıcı hesaplarıyla oluşturulan uygulamalar için Yönet sayfasında kişisel kullanıcı verilerini indirme ve silme bağlantıları sağlanır.
CookieİlkeSeçenekler ve KullanımCookieİlkesi
CookiePolicyOptions içinde Startup.ConfigureServices
başlatılır:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services
// to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies
// is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
// If the app uses session state, call AddSession.
// services.AddSession();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
// This method gets called by the runtime. Use this method to configure the
// HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
// If the app uses session state, call Session Middleware after Cookie
// Policy Middleware and before MVC Middleware.
// app.UseSession();
app.UseMvc();
}
}
UseCookiePolicy içinde çağrılır Startup.Configure
:
public class Startup
{
public Startup(IConfiguration configuration)
{
Configuration = configuration;
}
public IConfiguration Configuration { get; }
// This method gets called by the runtime. Use this method to add services
// to the container.
public void ConfigureServices(IServiceCollection services)
{
services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential cookies
// is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
services.AddDbContext<ApplicationDbContext>(options =>
options.UseSqlServer(
Configuration.GetConnectionString("DefaultConnection")));
services.AddDefaultIdentity<IdentityUser>()
.AddEntityFrameworkStores<ApplicationDbContext>();
// If the app uses session state, call AddSession.
// services.AddSession();
services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
}
// This method gets called by the runtime. Use this method to configure the
// HTTP request pipeline.
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
if (env.IsDevelopment())
{
app.UseDeveloperExceptionPage();
app.UseDatabaseErrorPage();
}
else
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseAuthentication();
// If the app uses session state, call Session Middleware after Cookie
// Policy Middleware and before MVC Middleware.
// app.UseSession();
app.UseMvc();
}
}
_CookieConsentPartial.cshtml kısmi görünüm
_CookieConsentPartial.cshtml kısmi görünümü:
@using Microsoft.AspNetCore.Http.Features
@{
var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
var showBanner = !consentFeature?.CanTrack ?? false;
var cookieString = consentFeature?.CreateConsentCookie();
}
@if (showBanner)
{
<nav id="cookieConsent" class="navbar navbar-default navbar-fixed-top" role="alert">
<div class="container">
<div class="navbar-header">
<button type="button" class="navbar-toggle" data-toggle="collapse" data-target="#cookieConsent .navbar-collapse">
<span class="sr-only">Toggle cookie consent banner</span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
<span class="icon-bar"></span>
</button>
<span class="navbar-brand"><span class="glyphicon glyphicon-info-sign" aria-hidden="true"></span></span>
</div>
<div class="collapse navbar-collapse">
<p class="navbar-text">
Use this space to summarize your privacy and cookie use policy.
</p>
<div class="navbar-right">
<a asp-page="/Privacy" class="btn btn-info navbar-btn">Learn More</a>
<button type="button" class="btn btn-default navbar-btn" data-cookie-string="@cookieString">Accept</button>
</div>
</div>
</div>
</nav>
<script>
(function () {
document.querySelector("#cookieConsent button[data-cookie-string]").addEventListener("click", function (el) {
document.cookie = el.target.dataset.cookieString;
document.querySelector("#cookieConsent").classList.add("hidden");
}, false);
})();
</script>
}
Bu kısmi:
- Kullanıcı için izleme durumunu alır. Uygulama onay gerektirecek şekilde yapılandırılmışsa, kullanıcının izinlerin izlenebilmesi için önce cookieonay vermesi gerekir. Onay gerekiyorsa, cookie onay paneli _Layout.cshtml dosyası tarafından oluşturulan gezinti çubuğunun üst kısmında sabittir.
- Gizlilik ve cookie kullanım ilkenizi özetlemek için bir HTML
<p>
öğesi sağlar. - Sitenizin Privacy gizlilik ilkesini ayrıntılandırabileceğiniz bir sayfa veya görünüm bağlantısı sağlar.
Temel cookies
Depolama cookieiçin onay verilmediyse, tarayıcıya yalnızca cookietemel olarak işaretlenmiş öğeler gönderilir. Aşağıdaki kod bir temel oluşturur cookie :
public IActionResult OnPostCreateEssentialAsync()
{
HttpContext.Response.Cookies.Append(Constants.EssentialSec,
DateTime.Now.Second.ToString(),
new CookieOptions() { IsEssential = true });
ResponseCookies = Response.Headers[HeaderNames.SetCookie].ToString();
return RedirectToPage("./Index");
}
TempData sağlayıcısı ve oturum durumu cookietemel değildir
TempData sağlayıcısıcookie gerekli değildir. İzleme devre dışı bırakılırsa TempData sağlayıcısı işlevsel değildir. İzleme devre dışı bırakıldığında TempData sağlayıcısını etkinleştirmek için, içinde TempData'yı cookie Startup.ConfigureServices
temel olarak işaretleyin:
// The TempData provider cookie is not essential. Make it essential
// so TempData is functional when tracking is disabled.
services.Configure<CookieTempDataProviderOptions>(options => {
options.Cookie.IsEssential = true;
});
Oturum durumucookietemel değildir. İzleme devre dışı bırakıldığında oturum durumu çalışmıyor. Aşağıdaki kod, oturumun cookiegerekli olmasını sağlar:
services.AddSession(options =>
{
options.Cookie.IsEssential = true;
});
Kişisel veriler
ASP.NET Bireysel kullanıcı hesaplarıyla oluşturulan Core uygulamaları, kişisel verileri indirmek ve silmek için kod içerir.
Kullanıcı adını ve ardından Kişisel veriler'i seçin:
Notlar:
- Kodu oluşturmak
Account/Manage
için bkz . İskele Identity. - Sil ve İndir bağlantıları yalnızca varsayılan kimlik verileri üzerinde işlem gerçekleştirir. Özel kullanıcı verilerinin silinmesi/indirilmesi için özel kullanıcı verileri oluşturan uygulamaların genişletilmesi gerekir. Daha fazla bilgi için bkz . özel kullanıcı verilerini ekleme Identity, indirme ve silme.
- Kullanıcı, yabancı anahtar nedeniyle art arda silme davranışıyla silindiğinde, veritabanı tablosunda
AspNetUserTokens
depolanan Identity kullanıcı için kaydedilen belirteçler silinir. - Facebook ve Google gibi dış sağlayıcı kimlik doğrulaması, ilke kabul etmeden önce cookie kullanılamaz.
Bekleme sırasında şifreleme
Bazı veritabanları ve depolama mekanizmaları bekleme durumunda şifrelemeye olanak sağlar. Bekleyen şifreleme:
- Depolanan verileri otomatik olarak şifreler.
- Verilere erişen yazılım için yapılandırma, programlama veya başka bir çalışma olmadan şifreler.
- En kolay ve en güvenli seçenektir.
- Veritabanının anahtarları ve şifrelemeyi yönetmesine izin verir.
Örneğin:
- Microsoft SQL ve Azure SQL Saydam Veri Şifrelemesi (TDE) sağlar.
- SQL Azure veritabanını varsayılan olarak şifreler
- Azure Blobları, Dosyalar, Tablo ve Kuyruk Depolama varsayılan olarak şifrelenir.
Bekleyen yerleşik şifreleme sağlamayan veritabanları için aynı korumayı sağlamak için disk şifrelemesi kullanabilirsiniz. Örneğin:
Ek kaynaklar
- Proje şablonları, gizlilik ve kullanım ilkenizle değiştirebileceğiniz uzantı noktalarını ve cookie saplı işaretlemeyi içerir.
- Sayfa
Pages/Privacy.cshtml
veyaViews/Home/Privacy.cshtml
görünüm, sitenizin gizlilik ilkesini ayrıntılı olarak görüntülemek için bir sayfa sağlar.
Geçerli ASP.NET Core şablonu tarafından oluşturulan bir uygulamadaki ASP.NET Core 2.2 şablonlarında bulunan gibi varsayılan cookie onay özelliğini etkinleştirmek için:
Kullanma yönergeleri listesine ekleyin
using Microsoft.AspNetCore.Http
.ve UseCookiePolicy içine
Startup.ConfigureServices
Startup.Configure
ekleyinCookiePolicyOptions:public class Startup { public Startup(IConfiguration configuration) { Configuration = configuration; } public IConfiguration Configuration { get; } public void ConfigureServices(IServiceCollection services) { services.Configure<CookiePolicyOptions>(options => { // This lambda determines whether user consent for non-essential // cookies is needed for a given request. options.CheckConsentNeeded = context => true; // requires using Microsoft.AspNetCore.Http; options.MinimumSameSitePolicy = SameSiteMode.None; }); services.AddRazorPages(); } public void Configure(IApplicationBuilder app, IWebHostEnvironment env) { if (env.IsDevelopment()) { app.UseDeveloperExceptionPage(); } else { app.UseExceptionHandler("/Error"); app.UseHsts(); } app.UseHttpsRedirection(); app.UseStaticFiles(); app.UseCookiePolicy(); app.UseRouting(); app.UseAuthorization(); app.UseEndpoints(endpoints => { endpoints.MapRazorPages(); }); } }
Dosyaya cookie kısmi
_Layout.cshtml
onay ekleyin:@*Previous markup removed for brevity*@ </header> <div class="container"> <partial name="_CookieConsentPartial" /> <main role="main" class="pb-3"> @RenderBody() </main> </div> <footer class="border-top footer text-muted"> <div class="container"> © 2019 - RPCC - <a asp-area="" asp-page="/Privacy">Privacy</a> </div> </footer> <script src="~/lib/jquery/dist/jquery.js"></script> <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.js"></script> <script src="~/js/site.js" asp-append-version="true"></script> @RenderSection("Scripts", required: false) </body> </html>
_CookieConsentPartial.cshtml dosyasını projeye ekleyin:
@using Microsoft.AspNetCore.Http.Features @{ var consentFeature = Context.Features.Get<ITrackingConsentFeature>(); var showBanner = !consentFeature?.CanTrack ?? false; var cookieString = consentFeature?.CreateConsentCookie(); } @if (showBanner) { <div id="cookieConsent" class="alert alert-info alert-dismissible fade show" role="alert"> Use this space to summarize your privacy and cookie use policy. <a asp-page="/Privacy">Learn More</a>. <button type="button" class="accept-policy close" data-dismiss="alert" aria-label="Close" data-cookie-string="@cookieString"> <span aria-hidden="true">Accept</span> </button> </div> <script> (function () { var button = document.querySelector("#cookieConsent button[data-cookie-string]"); button.addEventListener("click", function (event) { document.cookie = button.dataset.cookieString; }, false); })(); </script> }
Onay özelliği hakkında cookie bilgi edinmek için bu makalenin ASP.NET Core 2.2 sürümünü seçin.
- Proje şablonları, gizlilik ve kullanım ilkenizle değiştirebileceğiniz uzantı noktalarını ve cookie saplı işaretlemeyi içerir.
- Sayfa
Pages/Privacy.cshtml
veyaViews/Home/Privacy.cshtml
görünüm, sitenizin gizlilik ilkesini ayrıntılı olarak görüntülemek için bir sayfa sağlar.
Geçerli ASP.NET Core şablonu tarafından oluşturulan bir uygulamada ASP.NET Core 2.2 şablonlarında bulunan gibi varsayılan cookie onay özelliğini etkinleştirmek için aşağıdaki vurgulanmış kodu öğesine Program.cs
ekleyin:
var builder = WebApplication.CreateBuilder(args);
builder.Services.AddRazorPages();
builder.Services.Configure<CookiePolicyOptions>(options =>
{
// This lambda determines whether user consent for non-essential
// cookies is needed for a given request.
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
var app = builder.Build();
if (!app.Environment.IsDevelopment())
{
app.UseExceptionHandler("/Error");
app.UseHsts();
}
app.UseHttpsRedirection();
app.UseStaticFiles();
app.UseCookiePolicy();
app.UseRouting();
app.UseAuthorization();
app.MapRazorPages();
app.Run();
Önceki kodda CookiePolicyOptions ve UseCookiePolicy kullanılır.
Dosyaya cookie kısmi
_Layout.cshtml
onay ekleyin:@*Previous markup removed for brevity*@ </header> <div class="container"> <partial name="_CookieConsentPartial" /> <main role="main" class="pb-3"> @RenderBody() </main> </div> <footer class="border-top footer text-muted"> <div class="container"> © 2022 - WebGDPR - <a asp-area="" asp-page="/Privacy">Privacy</a> </div> </footer> <script src="~/lib/jquery/dist/jquery.min.js"></script> <script src="~/lib/bootstrap/dist/js/bootstrap.bundle.min.js"></script> <script src="~/js/site.js" asp-append-version="true"></script> @await RenderSectionAsync("Scripts", required: false) </body> </html>
_CookieConsentPartial.cshtml
Dosyayı projeye ekleyin:@using Microsoft.AspNetCore.Http.Features @{ var consentFeature = Context.Features.Get<ITrackingConsentFeature>(); var showBanner = !consentFeature?.CanTrack ?? false; var cookieString = consentFeature?.CreateConsentCookie(); } @if (showBanner) { <div id="cookieConsent" class="alert alert-info alert-dismissible fade show" role="alert"> Use this space to summarize your privacy and cookie use policy. <a asp-page="/Privacy">Learn More</a>. <button type="button" class="accept-policy close" data-bs-dismiss="alert" aria-label="Close" data-cookie-string="@cookieString"> <span aria-hidden="true">Accept</span> </button> </div> <script> (function () { var button = document.querySelector("#cookieConsent button[data-cookie-string]"); button.addEventListener("click", function (event) { document.cookie = button.dataset.cookieString; }, false); })(); </script> }
Onay özelliği hakkında cookie bilgi edinmek için bu makalenin ASP.NET Core 2.2 sürümünü seçin.
Bekleme sırasında şifreleme
Bazı veritabanları ve depolama mekanizmaları bekleme durumunda şifrelemeye olanak sağlar. Bekleyen şifreleme:
- Depolanan verileri otomatik olarak şifreler.
- Verilere erişen yazılım için yapılandırma, programlama veya başka bir çalışma olmadan şifreler.
- En kolay ve en güvenli seçenektir.
- Veritabanının anahtarları ve şifrelemeyi yönetmesine izin verir.
Örneğin:
- Microsoft SQL ve Azure SQL Saydam Veri Şifrelemesi (TDE) sağlar.
- SQL Azure veritabanını varsayılan olarak şifreler
- Azure Blobları, Dosyalar, Tablo ve Kuyruk Depolama varsayılan olarak şifrelenir.
Bekleyen yerleşik şifreleme sağlamayan veritabanları için aynı korumayı sağlamak için disk şifrelemesi kullanabilirsiniz. Örneğin:
Ek kaynaklar
ASP.NET Core