Genel Veri Koruma Yönetmeliği'de AB ASP.NET Core (GDPR) desteği
Gönderen Rick Anderson
ASP.NET Core, BAZı AB Genel Veri Koruma Yönetmeliği (GDPR) gereksinimlerini karşılamaya yardımcı olmak için API'ler ve şablonlar sağlar:
- Proje şablonları, uzantı noktalarını ve yerine gizlilik ve kullanım ilkenizi kullanabileceğiniz saptamış cookie işaretlemeyi içerir.
- Sayfalar/ Privacy .cshtml sayfası veya Görünümler/ Home / Privacy .cshtml görünümü, sitenizin gizlilik ilkesine ayrıntı veren bir sayfa sağlar.
ASP.NET Core 3.0 şablonu oluşturulan bir uygulamada ASP.NET Core 2.2 şablonlarında bulunan gibi varsayılan onay cookie özelliğini etkinleştirmek için:
using
using Microsoft.AspNetCore.Httpyönergeleri listesine ekleyin.'ye Cookie PolicyOptions ekleme
Startup.ConfigureServicesve Cookie İlkeyi kullanma:Startup.Configurepublic 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(); }); } }cookie _Layout.cshtml dosyasına kısmi 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>_ Cookie ConsentPartial.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 ASP.NET Core için bu makalenin 2.2 sürümünü cookie seçin.
- Proje şablonları, uzantı noktalarını ve yerine gizlilik ve kullanım ilkenizi kullanabileceğiniz saptamış cookie işaretlemeyi içerir.
- Onay cookie özelliği, kullanıcılarından kişisel bilgileri depolamak için onay istemenizi (ve izlemenizi) sağlar. Kullanıcı veri toplamaya onay vermezse ve uygulamada CheckConsentNeeded olarak ayarlanmışsa, temel olmayanlar
truecookie tarayıcıya gönderilmez. - Cookietemel olarak işaretlenir. Kullanıcı onay vermezse ve izleme devre dışı bıraksa bile temel bilgileri cookie tarayıcıya gönderilir.
- İzleme devre dışı cookie bırakılmıştırken TempData ve Oturumlar işlevsel değildir.
- Yönet Identity sayfası, kullanıcı verilerini indirmek ve silmek için bir bağlantı sağlar.
Örnek uygulama, ASP.NET Core 2.1 şablonlarına eklenen GDPR uzantı noktalarının ve API'lerinin çoğunu test eder. Test yönergeleri için Beni Oku dosyasına bakın.
Örnek kodu görüntüleme veya indirme ( nasılindir)
ASP.NET Core Şablon tarafından oluşturulan kodda GDPR desteği
Razor Proje şablonlarıyla oluşturulan sayfalar ve MVC projeleri aşağıdaki GDPR desteğini içerir:
- Cookie PolicyOptions ve Cookie Use Policy sınıfına
Startupayarlanır. - _ Cookie ConsentPartial.cshtml kısmi görünümü. Bu dosyaya bir Kabul Et düğmesi eklidir. Kullanıcı Kabul Et düğmesine tıkladığında depolara cookie onay verilmektedir.
- Sayfalar/ Privacy .cshtml sayfası veya Görünümler/ Home / Privacy .cshtml görünümü, sitenizin gizlilik ilkesine ayrıntı veren bir sayfa sağlar. _ Cookie ConsentPartial.cshtml dosyası sayfanın bağlantısını Privacy üretir.
- Bireysel kullanıcı hesaplarıyla oluşturulan uygulamalar için Yönet sayfasında kişisel kullanıcı verilerini indirme ve silme bağlantılarını bulabilirsiniz.
CookiepolicyOptions ve Use Cookie Policy
Cookie PolicyOptions 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();
}
}
Kullanma Cookie İlke içinde Startup.Configure çağrı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();
}
}
_CookieConsentPartial.cshtml kısmi görünümü
_ Cookie ConsentPartial.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 elde edin. Uygulama onay gerektirecek şekilde yapılandırılmışsa, kullanıcının izinlerin izlenmeden cookie önce onayı olması gerekir. Onay gerekli ise, cookie onay paneli _ Layout.cshtml dosyası tarafından oluşturulan gezinti çubuğunun üst kısmında sabittir.
- Gizliliğinizi ve
<p>kullanım ilkenizi özetlemek için bir HTML cookie öğesi sağlar. - Sitenizin gizlilik Privacy ilkesiyle ilgili ayrıntılı bilgi için sayfa veya görünüm bağlantısı sağlar.
Temel cookie
Depo onayı cookie sağlandı ise tarayıcıya yalnızca temel cookie olarak işaretlenmiş olan onaylar gönderilir. Aşağıdaki kod önemli bir cookie şey yapar:
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 cookie oturum durumu gerekli değildir
TempData sağlayıcısı cookie temel öneme sahip değildir. İzleme devre dışı bırakılırsa TempData sağlayıcısı işlevsel değildir. İzleme devre dışıyken TempData sağlayıcısını etkinleştirmek için TempData'yi içinde cookie temel olarak işaretlerini Startup.ConfigureServices kullanın:
// 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 durumu cookie temel değildir. İzleme devre dışı bırakılmıştır, oturum durumu işlevsel değildir. Aşağıdaki kod oturumu önemli cookie yapar:
services.AddSession(options =>
{
options.Cookie.IsEssential = true;
});
Kişisel veriler
ASP.NET Core hesaplarıyla oluşturulan tüm 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/Manageiçin bkz. İskele. Identity - Sil ve İndir bağlantıları yalnızca varsayılan kimlik verileri üzerinde hareket sağlar. Özel kullanıcı verileri oluşturan uygulamalar, özel kullanıcı verilerini silmek/indirmek için genişletilebilir. Daha fazla bilgi için bkz. 'ye özel Identity kullanıcı verileri ekleme, indirme ve silme.
- Veritabanı tablosunda depolanan kullanıcı için kaydedilen belirteçler, kullanıcı yabancı anahtardan dolayı basamaklı silme davranışı yoluyla silindiğinde Identity
AspNetUserTokenssilinir. - İlke kabuledilmeden önce Facebook ve Google gibi dış sağlayıcı kimlik cookie doğrulaması kullanılamaz.
Bekleme sırasında şifreleme
Bazı veritabanları ve depolama mekanizmaları beklemede şifrelemeye olanak sağlar. Beklemede ş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önetmesi için izin verir.
Örnek:
- Microsoft SQL ve Azure SQL (TDE) Saydam Veri Şifrelemesi sağlar.
- SQL Azure veritabanını varsayılan olarak şifreler
- Azure Blobları, Dosyalar, Tablo ve Kuyruk Depolama varsayılan olarak şifrelenir.
Beklemede yerleşik şifreleme sağ kullanmayan veritabanları için aynı korumayı sağlamak üzere disk şifrelemesini kullanabilirsiniz. Örnek: