Unterstützung der EU-Datenschutz-Grundverordnung (dsgvo) in ASP.net CoreEU General Data Protection Regulation (GDPR) support in ASP.NET Core

Von Rick AndersonBy Rick Anderson

ASP.net Core bietet APIs und Vorlagen, mit denen einige der Anforderungen der EU-Datenschutz-Grundverordnung ( dsgvo) erfüllt werden können:ASP.NET Core provides APIs and templates to help meet some of the EU General Data Protection Regulation (GDPR) requirements:

  • Die Projektvorlagen enthalten Erweiterungs Punkte und Stub-Markup, die Sie durch Ihre Datenschutz-und cookie Nutzungsrichtlinien ersetzen können.The project templates include extension points and stubbed markup that you can replace with your privacy and cookie use policy.
  • Die Seite pages/Privacy. cshtml oder views/Home/Privacy. cshtml enthält eine Seite, auf der Sie die Datenschutzrichtlinie Ihrer Website detailliert erläutern können.The Pages/Privacy.cshtml page or Views/Home/Privacy.cshtml view provides a page to detail your site's privacy policy.

So aktivieren Sie das standardmäßige cookie Zustimmungs Feature wie das in den ASP.net Core 2,2-Vorlagen in einer von ASP.net Core 3,0-Vorlagen generierten App:To enable the default cookie consent feature like that found in the ASP.NET Core 2.2 templates in an ASP.NET Core 3.0 template generated app:

  • Fügen Sie using Microsoft.AspNetCore.Http der Liste der using-Direktiven hinzu.Add using Microsoft.AspNetCore.Http to the list of using directives.

  • Fügen Sie Cookie policyoptions hinzu, Startup.ConfigureServices und verwenden Sie folgende Cookie Richtlinie Startup.Configure :Add CookiePolicyOptions to Startup.ConfigureServices and UseCookiePolicy to Startup.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();
            });
        }
    }
    
  • Fügen Sie die cookie Zustimmung zur Datei _Layout. cshtml hinzu:Add the cookie consent partial to the _Layout.cshtml file:

            @*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">
                &copy; 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>
    
    
  • Fügen Sie dem Projekt die Datei " * _ Cookie genehmipartial. cshtml* " hinzu:Add the _CookieConsentPartial.cshtml file to the project:

    @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>
    }
    
  • Wählen Sie den ASP.net Core 2,2-Version dieses Artikels aus, um Informationen über die cookie Zustimmungs Funktion zu erhalten.Select the ASP.NET Core 2.2 version of this article to read about the cookie consent feature.

  • Die Projektvorlagen enthalten Erweiterungs Punkte und Stub-Markup, die Sie durch Ihre Datenschutz-und cookie Nutzungsrichtlinien ersetzen können.The project templates include extension points and stubbed markup that you can replace with your privacy and cookie use policy.
  • cookieMit einer Zustimmungs Funktion können Sie Ihre Benutzer für die Speicherung persönlicher Informationen auffordern (und nachverfolgen).A cookie consent feature allows you to ask for (and track) consent from your users for storing personal information. Wenn ein Benutzer der Datensammlung nicht zugestimmt hat und für die APP checkgenehmigbar auf festgelegt ist true , werden nicht erforderliche cookie e nicht an den Browser gesendet.If a user hasn't consented to data collection and the app has CheckConsentNeeded set to true, non-essential cookies aren't sent to the browser.
  • Cookiee können als unverzichtbar gekennzeichnet werden.Cookies can be marked as essential. Wichtige cookie e werden an den Browser gesendet, auch wenn der Benutzer nicht zugestimmt hat und die Nachverfolgung deaktiviert ist.Essential cookies are sent to the browser even when the user hasn't consented and tracking is disabled.
  • TempData und die Sitzung cookie s sind nicht funktionsfähig, wenn die Nachverfolgung deaktiviert ist.TempData and Session cookies aren't functional when tracking is disabled.
  • Die Seite Identity Verwalten bietet einen Link zum herunterladen und Löschen von Benutzerdaten.The Identity manage page provides a link to download and delete user data.

Mit der Beispiel-App können Sie die meisten dsgvo-Erweiterungs Punkte und APIs testen, die den ASP.net Core 2,1-Vorlagen hinzugefügt wurden.The sample app allows you test most of the GDPR extension points and APIs added to the ASP.NET Core 2.1 templates. Weitere Informationen finden Sie in der Infodatei.See the ReadMe file for testing instructions.

Anzeigen oder Herunterladen von Beispielcode (Vorgehensweise zum Herunterladen)View or download sample code (how to download)

ASP.net Core dsgvo-Unterstützung in Vorlagen generiertem CodeASP.NET Core GDPR support in template-generated code

RazorSeiten und MVC-Projekte, die mit den Projektvorlagen erstellt wurden, enthalten die folgende dsgvo-Unterstützung:Razor Pages and MVC projects created with the project templates include the following GDPR support:

  • Cookie Policyoptions und use Cookie Policy werden in der- Startup Klasse festgelegt.CookiePolicyOptions and UseCookiePolicy are set in the Startup class.
  • Die Teilansicht" * _ Cookie Zustimmung partial. cshtml* ".The _CookieConsentPartial.cshtml partial view. Eine Accept -Schaltfläche ist in dieser Datei enthalten.An Accept button is included in this file. Wenn der Benutzer auf die Schaltfläche " annehmen " klickt, wird die Zustimmung zum Store cookie s bereitgestellt.When the user clicks the Accept button, consent to store cookies is provided.
  • Die Seite pages/Privacy. cshtml oder views/Home/Privacy. cshtml enthält eine Seite, auf der Sie die Datenschutzrichtlinie Ihrer Website detailliert erläutern können.The Pages/Privacy.cshtml page or Views/Home/Privacy.cshtml view provides a page to detail your site's privacy policy. Die Datei " * _ Cookie genehmipartial. cshtml* " generiert einen Link zur Datenschutzseite.The _CookieConsentPartial.cshtml file generates a link to the Privacy page.
  • Für apps, die mit einzelnen Benutzerkonten erstellt wurden, stellt die Seite verwalten Links zum herunterladen und Löschen persönlicher Benutzerdatenbereit.For apps created with individual user accounts, the Manage page provides links to download and delete personal user data.

CookiePolicyoptions und use Cookie PolicyCookiePolicyOptions and UseCookiePolicy

Cookie Policyoptions werden in initialisiert Startup.ConfigureServices :CookiePolicyOptions are initialized in 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();
    }
}

Verwenden Cookie Sie Die Richtlinie wird in aufgerufen Startup.Configure :UseCookiePolicy is called in 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();
    }
}

_CookieTeilansicht von "Zustimmung partial. cshtml"_CookieConsentPartial.cshtml partial view

Die Teilansicht " * _ Cookie Zustimmung partial. cshtml* ":The _CookieConsentPartial.cshtml partial view:

@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>
}

Diese partielle:This partial:

  • Ruft den Status der Nachverfolgung für den Benutzer ab.Obtains the state of tracking for the user. Wenn die APP so konfiguriert ist, dass Sie Zustimmung erfordert, muss der Benutzer zustimmen, bevor cookie s nachverfolgt werden kann.If the app is configured to require consent, the user must consent before cookies can be tracked. Wenn Zustimmung erforderlich ist, cookie wird der Zustimmungs Bereich am oberen Rand der von der Datei " * _ Layout. cshtml* " erstellten Navigationsleiste korrigiert.If consent is required, the cookie consent panel is fixed at top of the navigation bar created by the _Layout.cshtml file.
  • Stellt ein HTML <p> -Element bereit, um Ihre Datenschutz-und cookie Nutzungsrichtlinien zusammenzufassen.Provides an HTML <p> element to summarize your privacy and cookie use policy.
  • Enthält einen Link zur Datenschutzseite oder-Ansicht, auf der Sie die Datenschutzrichtlinie Ihrer Website detailliert erläutern können.Provides a link to Privacy page or view where you can detail your site's privacy policy.

Wichtige cookie sEssential cookies

Wenn die Zustimmung zu cookie den Geschäfts-e nicht angegeben wurde, cookie werden nur die als wesentlich gekennzeichneten s an den Browser gesendet.If consent to store cookies hasn't been provided, only cookies marked essential are sent to the browser. Der folgende Code stellt eine cookie wichtige Bedeutung:The following code makes a cookie essential:

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");
}

Der TempData-Anbieter und der Sitzungs Status cookie sind nicht zwingend erforderlich.TempData provider and session state cookies aren't essential

Der TempData-Anbieter cookie ist nicht zwingend erforderlich.The TempData provider cookie isn't essential. Wenn die Nachverfolgung deaktiviert ist, ist der TempData-Anbieter nicht funktionsfähig.If tracking is disabled, the TempData provider isn't functional. Um den TempData-Anbieter zu aktivieren, wenn die Nachverfolgung deaktiviert ist, markieren Sie TempData cookie in als unverzichtbar Startup.ConfigureServices :To enable the TempData provider when tracking is disabled, mark the TempData cookie as essential in 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;
});

Sitzungszustand cookie s sind nicht zwingend erforderlich.Session state cookies are not essential. Der Sitzungszustand ist nicht funktionsfähig, wenn die Überwachung deaktiviert ist.Session state isn't functional when tracking is disabled. Der folgende Code macht die Sitzung cookie notwendig:The following code makes session cookies essential:

services.AddSession(options =>
{
    options.Cookie.IsEssential = true;
});

Personenbezogene DatenPersonal data

ASP.net Core apps, die mit einzelnen Benutzerkonten erstellt wurden, enthalten Code zum herunterladen und Löschen von persönlichen Daten.ASP.NET Core apps created with individual user accounts include code to download and delete personal data.

Wählen Sie den Benutzernamen aus, und wählen Sie dann persönliche Datenaus:Select the user name and then select Personal data:

Seite "persönliche Daten verwalten"

Notizen:Notes:

  • Informationen zum Generieren des Account/Manage Codes finden Sie unter Identity Gerüstbau .To generate the Account/Manage code, see Scaffold Identity.
  • Die Links zum Löschen und herunterladen wirken sich nur auf die Standard Identitätsdaten aus.The Delete and Download links only act on the default identity data. Apps, die benutzerdefinierte Benutzerdaten erstellen, müssen erweitert werden, um die benutzerdefinierten Benutzerdaten zu löschen/herunterzuladen.Apps that create custom user data must be extended to delete/download the custom user data. Weitere Informationen finden Sie unter hinzufügen, herunterladen und Löschen von benutzerdefinierten Identity Benutzerdaten in .For more information, see Add, download, and delete custom user data to Identity.
  • Gespeicherte Token für den Benutzer, die in der Identity Datenbanktabelle gespeichert sind, AspNetUserTokens werden gelöscht, wenn der Benutzer aufgrund des Fremd Schlüsselsüber das kaskadierende Lösch Verhalten gelöscht wird.Saved tokens for the user that are stored in the Identity database table AspNetUserTokens are deleted when the user is deleted via the cascading delete behavior due to the foreign key.
  • Die Authentifizierung externer Anbieter, wie Facebook und Google, ist nicht verfügbar, bevor die cookie Richtlinie akzeptiert wird.External provider authentication, such as Facebook and Google, isn't available before the cookie policy is accepted.

Verschlüsselung ruhender DatenEncryption at rest

Einige Datenbanken und Speicher Mechanismen ermöglichen die Verschlüsselung ruhender Daten.Some databases and storage mechanisms allow for encryption at rest. Verschlüsselung ruhender Daten:Encryption at rest:

  • Verschlüsselte Daten werden automatisch verschlüsselt.Encrypts stored data automatically.
  • Verschlüsselt, ohne Konfiguration, Programmierung oder andere Aufgaben für die Software, die auf die Daten zugreift.Encrypts without configuration, programming, or other work for the software that accesses the data.
  • Ist die einfachste und sicherste Option.Is the easiest and safest option.
  • Ermöglicht der Datenbank die Verwaltung von Schlüsseln und Verschlüsselung.Allows the database to manage keys and encryption.

Zum Beispiel:For example:

Bei Datenbanken, die keine integrierte Verschlüsselung im Ruhezustand bereitstellen, können Sie die Datenträger Verschlüsselung möglicherweise verwenden, um denselben Schutz zu gewährleisten.For databases that don't provide built-in encryption at rest, you may be able to use disk encryption to provide the same protection. Zum Beispiel:For example:

Weitere RessourcenAdditional resources