Podpora eu Obecné nařízení o ochraně osobních údajů (GDPR) v ASP.NET Core
Autor: Rick Anderson
ASP.NET Core poskytuje rozhraní API a šablony, které pomáhají splnit některé požadavky nařízení EU Obecné nařízení o ochraně osobních údajů (GDPR):
- Šablony projektů obsahují ná přípony a zástupné značky, které můžete nahradit zásadami ochrany osobních cookie údajů a používání.
- Stránka Pages/ Privacy .cshtml nebo zobrazení Views/ Home / Privacy .cshtml poskytuje stránku s podrobnostmi o zásadách ochrany osobních údajů vašeho webu.
Pokud chcete povolit výchozí funkci souhlasu, jako je ta, která se nachází v šablonách ASP.NET Core 2.2 v aplikaci vygenerované šablonou cookie ASP.NET Core 3.0:
Přidejte
using Microsoft.AspNetCore.Httpdo seznamu direktiv using.Přidání Cookie možností zásad do a
Startup.ConfigureServicespoužití Cookie zásad proStartup.Configure: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(); }); } }Do souboru cookie _Layout.cshtml přidejte část souhlasu:
@*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>Do projektu přidejte soubor _ Cookie ConsentPartial.cshtml:
@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> }Výběrem ASP.NET Core 2.2 tohoto článku si přečtěte informace o funkci cookie souhlasu.
- Šablony projektů obsahují ná přípony a zástupné značky, které můžete nahradit zásadami ochrany osobních cookie údajů a používání.
- Funkce cookie souhlasu umožňuje požádat uživatele o (a sledovat) souhlas s ukládáním osobních údajů. Pokud uživatel nevysouvá souhlas se shromažďováním dat a aplikace má nastavenou hodnotu CheckConsentNeeded na , do prohlížeče se neodesílaly jiné
truenež nezbytné cookie hodnoty. - Cookiey je možné označit jako nezbytné. Základní prvky se odesílat do prohlížeče, i když uživatel nevysoudí souhlas a cookie sledování je zakázané.
- TempData a Relace cookie nejsou funkční, pokud je sledování zakázané.
- Na Identity stránce správa je odkaz pro stažení a odstranění uživatelských dat.
Ukázková aplikace umožňuje otestovat většinu rozšíření GDPR a rozhraní API přidaných do šablon ASP.NET Core 2.1. Pokyny k testování najdete v souboru ReadMe.
Zobrazení nebo stažení ukázkového kódu (stažení)
ASP.NET Core Podpora GDPR v kódu generovaném šablonou
Razor Stránky a projekty MVC vytvořené pomocí šablon projektů zahrnují následující podporu GDPR:
- Cookie PolicyOptions a Use Cookie Policy jsou nastavené ve
Startuptřídě . - Částečné _ Cookie zobrazení ConsentPartial.cshtml Tento soubor obsahuje tlačítko Přijmout. Když uživatel klikne na tlačítko Přijmout, zobrazí se souhlas cookie s uložením.
- Stránka Pages/ Privacy .cshtml nebo zobrazení Views/ Home / Privacy .cshtml poskytuje stránku s podrobnostmi o zásadách ochrany osobních údajů vašeho webu. Soubor _ Cookie ConsentPartial.cshtml vygeneruje odkaz na Privacy stránku.
- U aplikací vytvořených s jednotlivými uživatelskými účty poskytuje stránka Správa odkazy na stažení a odstranění osobních uživatelských dat.
CookieZásadyMožnosti a použití Cookie zásad
Cookie PolicyOptions se inicializuje v Startup.ConfigureServices :
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();
}
}
Použití Cookie V souboru se volá zásada 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();
}
}
_CookieČástečné zobrazení ConsentPartial.cshtml
Částečné _ Cookie zobrazení ConsentPartial.cshtml:
@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>
}
Částečně:
- Získá stav sledování pro uživatele. Pokud je aplikace nakonfigurovaná tak, aby vyžadovala souhlas, musí uživatel před sledováním cookie souhlasu. Pokud se vyžaduje souhlas, panel pro udělení souhlasu se opraví v horní části navigačního panelu cookie vytvořeného _ souborem Layout.cshtml.
- Poskytuje element
<p>HTML, který shrnuje vaše zásady ochrany osobních cookie údajů a použití. - Poskytuje odkaz na stránku nebo zobrazení, kde můžete podrobně zobrazit zásady ochrany osobních Privacy údajů vašeho webu.
Základní cookie prvky
Pokud nebyl poskytnut souhlas s uložením, do prohlížeče se odesílat pouze označené cookie cookie nezbytné údaje. Následující kód je cookie nezbytný:
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");
}
Poskytovatel TempData a stav cookie relace nejsou nezbytné.
Poskytovatel TempData cookie není nezbytný. Pokud je sledování zakázané, poskytovatel TempData není funkční. Pokud chcete poskytovatele TempData povolit, když je sledování zakázané, označte tempData cookie jako nezbytné v souboru Startup.ConfigureServices :
// 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;
});
Stav relace cookie Nejsou nezbytné. Stav relace není funkční, pokud je sledování zakázané. Následující kód tvoří základ cookie relace:
services.AddSession(options =>
{
options.Cookie.IsEssential = true;
});
Osobní údaje
ASP.NET Core aplikace vytvořené pomocí jednotlivých uživatelských účtů obsahují kód pro stažení a odstranění osobních údajů.
Vyberte uživatelské jméno a pak vyberte Osobní údaje:

Poznámky:
- Pokud chcete kód
Account/Managevygenerovat, podívejte se na Identity scaffold . - Odkazy Odstranit a Stáhnout se dějí jenom s výchozími daty identity. Aplikace, které vytvářejí vlastní uživatelská data, se musí rozšířit tak, aby odstranily nebo stáhly vlastní uživatelská data. Další informace najdete v tématu Přidání, stažení Identity a odstranění vlastních uživatelských dat do .
- Uložené tokeny pro uživatele uložené v databázové tabulce se odstraní, když se uživatel odstraní kaskádovým chováním při odstraňování kvůli Identity
AspNetUserTokenscizímu klíči. - Ověřování externíhozprostředkovatele , jako je Facebook a Google, není k dispozici před cookie přijetím zásad.
Šifrování neaktivních uložených dat
Některé databáze a mechanismy úložiště umožňují šifrování v klidových případech. Šifrování v klidové době:
- Šifruje uložená data automaticky.
- Šifruje bez konfigurace, programování nebo jiné práce pro software, který přistupuje k datům.
- Je nejjednodušší a nejbezpečnější možnost.
- Umožňuje databázi spravovat klíče a šifrování.
Příklad:
- Microsoft SQL a Azure SQL poskytují transparentní šifrování dat (TDE).
- SQL Azure zašifruje databázi ve výchozím nastavení.
- Objekty blob Azure, soubory,tabulky a Storage jsou ve výchozím nastavení šifrované.
V případě databází, které neposkytují integrované šifrování v klidových činech, můžete k zajištění stejné ochrany použít šifrování disku. Příklad: