Podpora obecného nařízení EU 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 obecného nařízení EU o ochraně osobních údajů (GDPR ):
- Šablony projektů zahrnují body rozšíření a zástupné značky, které můžete nahradit zásadami privacy a cookie použít je.
- Stránka
Pages/Privacy.cshtml
neboViews/Home/Privacy.cshtml
zobrazení poskytuje stránku s podrobnostmi o zásadách vašeho webu privacy .
Pokud chcete povolit výchozí cookie funkci vyjádření souhlasu, která se nachází v šablonách ASP.NET Core 2.2 v aktuální vygenerované šabloně ASP.NET Core, přidejte následující zvýrazněný kód:Program.cs
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();
V předchozím kódu CookiePolicyOptions se UseCookiePolicy používají.
cookie Přidejte do
_Layout.cshtml
souboru částečný souhlas:@*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
Přidejte soubor do projektu:@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> }
Vyberte verzi tohoto článku ASP.NET Core 2.2 a přečtěte si informace o funkci souhlasu cookie .
Přizpůsobení hodnoty souhlasu cookie
Zadejte hodnotu použitou ke sledování, pokud uživatel souhlasil se cookie zásadami použití pomocí CookiePolicyOptions.ConsentCookieValue
vlastnosti:
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();
Šifrování na adrese rest
Některé databáze a mechanismy úložiště umožňují šifrování na adrese rest. Šifrování v rest:
- Š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ší volbou.
- 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 ve výchozím nastavení databázi šifruje.
- Azure Blobs, Files, Table a Queue Storage se ve výchozím nastavení šifrují.
U databází, které neposkytují integrované šifrování rest, můžete k zajištění stejné ochrany použít šifrování disků. Příklad:
Další materiály
- Šablony projektů zahrnují body rozšíření a zástupné značky, které můžete nahradit zásadami privacy a cookie použít je.
- Funkce cookie vyjádření souhlasu umožňuje požádat (a sledovat) souhlas uživatelů s ukládáním osobních údajů. Pokud uživatel neschyboval souhlas se shromažďováním dat a aplikace je nastavená CheckConsentNeeded na
true
, neposílají se do prohlížeče jiné než nezbytné soubory cookie. - Soubory cookie lze označit jako nezbytné. Základní soubory cookie se posílají do prohlížeče, i když uživatel neschyboval souhlas a sledování je zakázané.
- Soubory cookie tempData a relace nejsou funkční, pokud je sledování zakázané.
- Stránka Identity správa obsahuje odkaz ke stažení a odstranění uživatelských dat.
Ukázková aplikace umožňuje otestovat většinu bodů 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 (postup stažení)
podpora ASP.NET Core GDPR v kódu generovaném šablonou
Razor Stránky a projekty MVC vytvořené pomocí šablon projektů zahrnují následující podporu GDPR:
- CookiePolicyOptions a UseCookiePolicy jsou nastaveny
Startup
ve třídě. - Částečné zobrazení _CookieConsentPartial.cshtml. Do tohoto souboru je zahrnuto tlačítko Přijmout . Když uživatel klikne na tlačítko Přijmout , zobrazí se souhlas s ukládáním souborů cookie.
- Stránka
Pages/Privacy.cshtml
neboViews/Home/Privacy.cshtml
zobrazení poskytuje stránku s podrobnostmi o zásadách vašeho webu privacy . Soubor _CookieConsentPartial.cshtml vygeneruje odkaz na Privacy stránku. - U aplikací vytvořených pomocí jednotlivých uživatelských účtů poskytuje stránka Spravovat odkazy na stahování a odstraňování osobních uživatelských dat.
CookiePolicyOptions a UseCookiePolicy
CookiePolicyOptions inicializují se 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();
}
}
UseCookiePolicy je volána v 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();
}
}
Částečné zobrazení _CookieConsentPartial.cshtml
Částečné zobrazení _CookieConsentPartial.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>
}
Tato částečná:
- Získá stav sledování uživatele. Pokud je aplikace nakonfigurovaná tak, aby vyžadovala souhlas, musí uživatel před sledováním souborů cookie souhlasit. Pokud je vyžadován souhlas, cookie panel pro vyjádření souhlasu se opraví v horní části navigačního panelu vytvořeného souborem _Layout.cshtml .
- Poskytuje element HTML
<p>
pro shrnutí a privacy cookie použití zásad. - Obsahuje odkaz na Privacy stránku nebo zobrazení, kde můžete podrobně zobrazit zásady webu privacy .
Základní soubory cookie
Pokud nebyl poskytnut souhlas s ukládáním souborů cookie, odešlou se do prohlížeče jenom soubory cookie označené jako nezbytné. Následující kód má zásadní význam 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");
}
Poskytovatel tempData a soubory cookie stavu relace nejsou nezbytné.
Zprostředkovatelcookie TempData není nezbytný. Pokud je sledování zakázané, poskytovatel TempData není funkční. Pokud chcete povolit zprostředkovatele TempData při zakázání sledování, označte tempData cookie jako základní v 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;
});
Soubory cookie stavu relace nejsou nezbytné. Stav relace není funkční, pokud je sledování zakázané. Následující kód dělá soubory cookie relace nezbytné:
services.AddSession(options =>
{
options.Cookie.IsEssential = true;
});
Osobní údaje
ASP.NET aplikace Core vytvořené pomocí jednotlivých uživatelských účtů obsahují kód pro stahování a odstraňování osobních údajů.
Vyberte uživatelské jméno a pak vyberte Osobní údaje:
Poznámky:
- Pokud chcete vygenerovat
Account/Manage
kód, přečtěte si téma Generování uživatelského rozhraní Identity. - Odkazy Odstranit a Stáhnout fungují pouze s výchozími identity daty. Aplikace, které vytvářejí vlastní uživatelská data, musí být rozšířeny, aby se odstranila nebo stáhla vlastní uživatelská data. Další informace naleznete v tématu Přidání, stažení a odstranění vlastních uživatelských dat do Identity.
- Uložené tokeny pro uživatele uloženého Identity v tabulce
AspNetUserTokens
databáze se odstraní, když se uživatel odstraní prostřednictvím kaskádového chování odstranění z důvodu cizího klíče. - Ověřování externího poskytovatele, jako je Facebook a Google, není před přijetím zásad k dispozici cookie .
Šifrování na adrese rest
Některé databáze a mechanismy úložiště umožňují šifrování na adrese rest. Šifrování v rest:
- Š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ší volbou.
- 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 ve výchozím nastavení databázi šifruje.
- Azure Blobs, Files, Table a Queue Storage se ve výchozím nastavení šifrují.
U databází, které neposkytují integrované šifrování rest, můžete k zajištění stejné ochrany použít šifrování disků. Příklad:
Další materiály
- Šablony projektů zahrnují body rozšíření a zástupné značky, které můžete nahradit zásadami privacy a cookie použít je.
- Stránka
Pages/Privacy.cshtml
neboViews/Home/Privacy.cshtml
zobrazení poskytuje stránku s podrobnostmi o zásadách vašeho webu privacy .
Pokud chcete povolit výchozí cookie funkci vyjádření souhlasu, která se nachází v šablonách ASP.NET Core 2.2 v aktuální aplikaci vygenerované šablonou ASP.NET Core:
Přidejte
using Microsoft.AspNetCore.Http
do seznamu direktiv using.Přidat CookiePolicyOptions do
Startup.ConfigureServices
a UseCookiePolicy doStartup.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(); }); } }
cookie Přidejte do
_Layout.cshtml
souboru částečný souhlas:@*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>
Přidejte do projektu soubor _CookieConsentPartial.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> }
Vyberte verzi tohoto článku ASP.NET Core 2.2 a přečtěte si informace o funkci souhlasu cookie .
- Šablony projektů zahrnují body rozšíření a zástupné značky, které můžete nahradit zásadami privacy a cookie použít je.
- Stránka
Pages/Privacy.cshtml
neboViews/Home/Privacy.cshtml
zobrazení poskytuje stránku s podrobnostmi o zásadách vašeho webu privacy .
Pokud chcete povolit výchozí cookie funkci vyjádření souhlasu, která se nachází v šablonách ASP.NET Core 2.2 v aktuální vygenerované šabloně ASP.NET Core, přidejte následující zvýrazněný kód:Program.cs
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();
V předchozím kódu CookiePolicyOptions se UseCookiePolicy používají.
cookie Přidejte do
_Layout.cshtml
souboru částečný souhlas:@*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
Přidejte soubor do projektu:@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> }
Vyberte verzi tohoto článku ASP.NET Core 2.2 a přečtěte si informace o funkci souhlasu cookie .
Šifrování na adrese rest
Některé databáze a mechanismy úložiště umožňují šifrování na adrese rest. Šifrování v rest:
- Š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ší volbou.
- 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 ve výchozím nastavení databázi šifruje.
- Azure Blobs, Files, Table a Queue Storage se ve výchozím nastavení šifrují.
U databází, které neposkytují integrované šifrování rest, můžete k zajištění stejné ochrany použít šifrování disků. Příklad: