Stöd för EU:s allmänna dataskyddsförordning (GDPR) i ASP.NET Core
ASP.NET Core tillhandahåller API:er och mallar som hjälper dig att uppfylla några av de allmänna dataskyddsförordningen (GDPR) krav:
- Projektmallarna innehåller tilläggspunkter och stubbat format som du kan ersätta med din sekretess- och cookie användningspolicy.
- Vyn
Pages/Privacy.cshtml
ellerViews/Home/Privacy.cshtml
innehåller en sida som beskriver webbplatsens sekretesspolicy.
Gdpr-vägledning som gäller för Blazor appar finns i STÖD för EU:s allmänna dataskyddsförordning (GDPR) i ASP.NET Core Blazor.
Om du vill aktivera standardfunktionen för cookie medgivande, liknande den som finns i ASP.NET Core 2.2-mallarna, i en aktuell app som genererats med en ASP.NET Core-mall, lägger du till följande markerade kod i 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();
I föregående kod används CookiePolicyOptions och UseCookiePolicy.
Lägg till cookie delvis medgivande till filen
_Layout.cshtml
:@*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>
Lägg till filen
_CookieConsentPartial.cshtml
i projektet:@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> }
Välj ASP.NET Core 2.2-version av den här artikeln för att läsa om funktionen cookie medgivande.
Anpassa värdet för cookie medgivande
Ange det värde som används för att spåra om användaren samtyckt till cookie använda principen med hjälp av egenskapen CookiePolicyOptions.ConsentCookieValue
:
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();
Kryptering i vila
Vissa databaser och lagringsmekanismer tillåter kryptering i vila. Kryptering i vila:
- Krypterar lagrade data automatiskt.
- Krypterar utan konfiguration, programmering eller annat arbete för programvaran som kommer åt data.
- Är det enklaste och säkraste alternativet.
- Gör att databasen kan hantera nycklar och kryptering.
Till exempel:
- Microsoft SQL och Azure SQL tillhandahåller transparent datakryptering (TDE).
- SQL Azure krypterar databasen som standard
- Azure Blobs, Files, Table och Queue Storage krypteras som standard.
För databaser som inte tillhandahåller inbyggd kryptering i vila kanske du kan använda diskkryptering för att tillhandahålla samma skydd. Till exempel:
Ytterligare resurser
- Projektmallarna innehåller tilläggspunkter och stubbade markeringar som du kan ersätta med din sekretess- och cookie användningsprincip.
- Med en cookie medgivandefunktion kan du be om (och spåra) medgivande från dina användare för att lagra personlig information. Om en användare inte har samtyckt till datainsamling och appen har CheckConsentNeeded inställt på
true
skickas inte icke-nödvändiga cookies till webbläsaren. - Cookies kan markeras som viktiga. Viktiga cookies skickas till webbläsaren även när användaren inte har samtyckt och spårning är inaktiverat.
- TempData- och Sessionscookies inte fungerar när spårning inaktiveras.
- Sidan Identity hantera innehåller en länk för att ladda ned och ta bort användardata.
Med exempelappen kan du testa de flesta GDPR-tilläggspunkter och API:er som lagts till i mallarna ASP.NET Core 2.1. Se filen ReadMe för testningsinstruktioner.
Visa eller ladda ned exempelkod (hur du laddar ned)
ASP.NET Core GDPR-stöd i mallgenererad kod
Razor Pages- och MVC-projekt som skapats med projektmallarna innehåller följande GDPR-stöd:
-
CookiePolicyOptions och UseCookiePolicy anges i klassen
Startup
. - _CookieConsentPartial.cshtmlvisningsdel. Knappen Acceptera ingår i den här filen. När användaren klickar på knappen Acceptera, ges samtycke till att lagra cookies.
- Vyn
Pages/Privacy.cshtml
ellerViews/Home/Privacy.cshtml
innehåller en sida som beskriver webbplatsens sekretesspolicy. Filen _CookieConsentPartial.cshtml genererar en länk till sidan Privacy. - För appar som skapats med enskilda användarkonton innehåller sidan Hantera länkar för att ladda ned och ta bort personliga användardata.
CookiePolicyOptions och UseCookiePolicy
CookiePolicyOptions initieras i 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 anropas i 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 partiell vy
_CookieConsentPartial.cshtml delvis vy:
@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>
}
Denna delvis:
- Hämtar användarens spårningstillstånd. Om appen är konfigurerad för att kräva medgivande måste användaren samtycka innan cookies kan spåras. Om medgivande krävs är medgivandepanelen cookie fäst överst i navigeringsfältet som skapats av filen _Layout.cshtml.
- Innehåller ett HTML-
<p>
-element för att sammanfatta din sekretess och cookie användningsprincip. - Innehåller en länk till Privacy sida eller vy där du kan beskriva webbplatsens sekretesspolicy.
Viktiga cookies
Om samtycke till att lagra cookies inte har angetts skickas endast cookies som markerats som viktiga till webbläsaren. Följande kod gör ett cookie viktigt:
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-providern och sessionstillståndscookies är inte nödvändiga
TempData providercookie är inte väsentlig. Om spårning är inaktiverat fungerar inte TempData-providern. Om du vill aktivera TempData-providern när spårning är inaktiverad markerar du TempData-cookie som viktigt i 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;
});
Sessionstillstånd cookies är inte nödvändiga. Sessionstillståndet fungerar inte när spårning är inaktiverat. Följande kod gör sessionscookies viktiga:
services.AddSession(options =>
{
options.Cookie.IsEssential = true;
});
Personuppgifter
ASP.NET Core-appar som skapats med enskilda användarkonton innehåller kod för att ladda ned och ta bort personliga data.
Välj användarnamnet och välj sedan Personliga data:
Anteckningar:
- Information om hur du genererar
Account/Manage
-koden finns i Scaffold Identity. - Länkarna Ta bort och Ladda ned fungerar bara på standardidentitetsdata. Appar som skapar anpassade användardata måste utökas för att ta bort/ladda ned anpassade användardata. Mer information finns i Lägg till, ladda ned och ta bort anpassade användardata till Identity.
- De sparade token för användaren som finns i databastabellen Identity
AspNetUserTokens
tas bort när användaren tas bort till följd av det sammanhängande borttagningsbeteendet och främmande nyckel . - Extern providerautentisering, till exempel Facebook och Google, är inte tillgänglig innan cookie-principen godkänns.
Kryptering i vila
Vissa databaser och lagringsmekanismer tillåter kryptering i vila. Kryptering i vila:
- Krypterar lagrade data automatiskt.
- Krypterar utan konfiguration, programmering eller annat arbete för programvaran som kommer åt data.
- Är det enklaste och säkraste alternativet.
- Gör att databasen kan hantera nycklar och kryptering.
Till exempel:
- Microsoft SQL och Azure SQL tillhandahåller transparent datakryptering (TDE).
- SQL Azure krypterar databasen som standard
- Azure Blobs, Files, Table och Queue Storage krypteras som standard.
För databaser som inte tillhandahåller inbyggd kryptering i vila kanske du kan använda diskkryptering för att tillhandahålla samma skydd. Till exempel:
Ytterligare resurser
- Projektmallarna innehåller tilläggspunkter och stubbade markeringar som du kan ersätta med din sekretess- och cookie användningsprincip.
- Vyn
Pages/Privacy.cshtml
ellerViews/Home/Privacy.cshtml
innehåller en sida som beskriver webbplatsens sekretesspolicy.
Så här aktiverar du standardfunktionen cookie medgivande som finns i mallarna ASP.NET Core 2.2 i en aktuell ASP.NET Core-mallgenererad app:
Lägg till
using Microsoft.AspNetCore.Http
i listan över användningsdirektiv.Lägg till CookiePolicyOptions i
Startup.ConfigureServices
och UseCookiePolicy iStartup.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(); }); } }
Lägg till cookie delvis medgivande till filen
_Layout.cshtml
:@*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>
Lägg till filen _CookieConsentPartial.cshtml i projektet:
@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älj ASP.NET Core 2.2-versionen av den här artikeln för att läsa om funktionen cookie medgivande.
- Projektmallarna innehåller tilläggspunkter och provisoriska markeringar som du kan ersätta med din sekretesspolicy och cookie användningspolicy.
- Vyn
Pages/Privacy.cshtml
ellerViews/Home/Privacy.cshtml
innehåller en sida som beskriver webbplatsens sekretesspolicy.
Om du vill aktivera standardfunktionen för cookie medgivande, liknande den som finns i ASP.NET Core 2.2-mallarna, i en aktuell app som genererats med en ASP.NET Core-mall, lägger du till följande markerade kod i 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();
I föregående kod används CookiePolicyOptions och UseCookiePolicy.
Lägg till cookie delvis medgivande till filen
_Layout.cshtml
:@*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>
Lägg till filen
_CookieConsentPartial.cshtml
i projektet:@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> }
Välj ASP.NET Core 2.2-version av den här artikeln för att läsa om funktionen cookie medgivande.
Kryptering i vila
Vissa databaser och lagringsmekanismer tillåter kryptering i vila. Kryptering i vila:
- Krypterar lagrade data automatiskt.
- Krypterar utan konfiguration, programmering eller annat arbete för programvaran som kommer åt data.
- Är det enklaste och säkraste alternativet.
- Gör att databasen kan hantera nycklar och kryptering.
Till exempel:
- Microsoft SQL och Azure SQL tillhandahåller transparent datakryptering (TDE).
- SQL Azure krypterar databasen som standard
- Azure Blobs, Files, Table och Queue Storage krypteras som standard.
För databaser som inte tillhandahåller inbyggd kryptering i vila kanske du kan använda diskkryptering för att tillhandahålla samma skydd. Till exempel:
Ytterligare resurser
ASP.NET Core