Sdílet prostřednictvím


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:

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 />

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 BlazorSamplea 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 hodnotyCookiePolicyAcceptedayesna 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 />

Další zdroje informací