Podpora obecného nařízení EU o ochraně osobních údajů (GDPR) v ASP.NET Core Blazor
Poznámka
Toto není nejnovější verze tohoto článku. Aktuální verzi naleznete v .NET 9 verze tohoto článku.
Varování
Tato verze ASP.NET Core se už nepodporuje. Další informace naleznete v zásadách podpory pro .NET a .NET Core. Aktuální verzi tohoto článku naleznete v .NET 9.
Důležitý
Tyto informace se týkají předběžného vydání produktu, který může být podstatně změněn před komerčním vydáním. Společnost Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, pokud jde o informace uvedené zde.
Aktuální verzi naleznete v .NET 9 verze tohoto článku.
Tento článek vysvětluje, jak implementovat podporu pro požadavky obecného nařízení EU o ochraně osobních údajů (GDPR).
V souboru Program
:
- Přidejte konfiguraci CookiePolicyOptions, která vyžaduje souhlas uživatele pro soubory cookie, které nejsou nezbytné, a nastavte zásady stejného webu na žádné. Další informace naleznete v tématu Práce se soubory cookie SameSite v ASP.NET Core.
- Přidejte výchozí implementaci služby IHttpContextAccessor voláním AddHttpContextAccessor.
builder.Services.Configure<CookiePolicyOptions>(options =>
{
options.CheckConsentNeeded = context => true;
options.MinimumSameSitePolicy = SameSiteMode.None;
});
builder.Services.AddHttpContextAccessor();
Do souboru Program
před voláním MapRazorComponentspřidejte Policy Middleware Cookie voláním UseCookiePolicy:
Do souboru Program
před voláním MapBlazorHubpřidejte zásadní middleware Cookie voláním UseCookiePolicy:
app.UseCookiePolicy();
Přidejte následující komponentu CookieConsent
pro zpracování souhlasu zásad cookie.
Komponenta k načtení modulu používá kompletovaný javascriptový soubors názvem CookieConsent.razor.js
. Potvrďte nebo upravte cestu k umístěnému souboru v rámci metody OnAfterRenderAsync
. Následující komponenta předpokládá, že komponenta a její doprovodný javascriptový soubor jsou ve složce Components
aplikace.
CookieConsent.razor
:
@using Microsoft.AspNetCore.Http.Features
@using Microsoft.AspNetCore.Http
@implements IAsyncDisposable
@inject IHttpContextAccessor Http
@inject IJSRuntime JS
@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 href="/privacy">Privacy Policy</a>
<button type="button" @onclick="AcceptPolicy" class="accept-policy close"
data-bs-dismiss="alert" aria-label="Close"
data-cookie-string="@cookieString">
Accept
</button>
</div>
}
@code {
private IJSObjectReference? module;
private ITrackingConsentFeature? consentFeature;
private bool showBanner;
private string? cookieString;
protected override void OnInitialized()
{
consentFeature = Http.HttpContext?.Features.Get<ITrackingConsentFeature>();
showBanner = !consentFeature?.CanTrack ?? false;
cookieString = consentFeature?.CreateConsentCookie();
}
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
module = await JS.InvokeAsync<IJSObjectReference>("import",
"./Components/CookieConsent.razor.js");
}
}
private async Task AcceptPolicy()
{
if (module is not null)
{
await module.InvokeVoidAsync("acceptPolicy", cookieString);
showBanner = false;
}
}
async ValueTask IAsyncDisposable.DisposeAsync()
{
if (module is not null)
{
try
{
await module.DisposeAsync();
}
catch (JSDisconnectedException)
{
}
}
}
}
Přidejte následující kompletovaný soubor JavaScriptu, aby se zachovala funkce acceptPolicy
v modulu JavaScriptu.
CookieConsent.razor.js
:
export function acceptPolicy(cookieString) {
document.cookie = cookieString;
}
Do <main>
Razor značky komponenty MainLayout
(MainLayout.razor
) přidejte komponentu CookieConsent
:
<CookieConsent />
Přizpůsobení hodnoty souhlasu cookie
Zadejte hodnotu souhlasu cookie přiřazením vlastního řetězce k CookiePolicyOptions.ConsentCookieValue. Následující příklad změní výchozí hodnotu "yes
" na "true
":
options.ConsentCookieValue = "true";
V Blazor WebAssembly aplikacích je místní úložiště pohodlným přístupem pro zachování přijetí zásad cookie webu uživatele. Předchozí metoda ukazuje přístup.
Pokud aplikace ještě nemá složku Shared
pro sdílené komponenty, přidejte do aplikace složku Shared
.
Přidejte obor názvů pro sdílené komponenty do souboru _Imports.razor
. V následujícím příkladu je obor názvů aplikace BlazorSample
a obor názvů sdílené složky je BlazorSample.Shared
:
@using BlazorSample.Shared
Přidejte následující komponentu CookieConsent
pro zpracování souhlasu s cookie zásadami.
Shared/CookieConsent.razor
:
@implements IAsyncDisposable
@inject IJSRuntime JS
@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 href="/privacy">Privacy Policy</a>
<button type="button" @onclick="AcceptPolicy" class="accept-policy close"
data-bs-dismiss="alert" aria-label="Close">
<span aria-hidden="true">Accept</span>
</button>
</div>
}
@code {
private IJSObjectReference? module;
private bool showBanner = false;
protected override async Task OnAfterRenderAsync(bool firstRender)
{
if (firstRender)
{
module = await JS.InvokeAsync<IJSObjectReference>("import",
"./Shared/CookieConsent.razor.js");
showBanner = !await module.InvokeAsync<bool>("getCookiePolicyAccepted");
StateHasChanged();
}
}
private async Task AcceptPolicy()
{
if (module is not null)
{
await module.InvokeVoidAsync("setCookiePolicyAccepted");
showBanner = false;
}
}
async ValueTask IAsyncDisposable.DisposeAsync()
{
if (module is not null)
{
try
{
await module.DisposeAsync();
}
catch (JSDisconnectedException)
{
}
}
}
}
Přidejte následující soubor JavaScriptu , aby bylo možné zachovat funkce setCookiePolicyAccepted
a getCookiePolicyAccepted
v modulu JavaScriptu.
Shared/CookieConsent.razor.js
:
export function getCookiePolicyAccepted() {
const cookiePolicy = localStorage.getItem('CookiePolicyAccepted');
return cookiePolicy === 'yes' ? true : false;
}
export function setCookiePolicyAccepted() {
localStorage.setItem('CookiePolicyAccepted', 'yes');
}
V předchozím příkladu můžete změnit název položky a hodnoty místního úložiště z hodnotyCookiePolicyAccepted
ayes
na libovolné preferované hodnoty. Pokud změníte jednu nebo obě hodnoty, aktualizujte obě funkce.
Do značky <main>
Razor komponenty MainLayout
(Layout/MainLayout.razor
) přidejte komponentu CookieConsent
.
<CookieConsent />