AspNetCore.Docs/aspnetcore/security/gdpr.md

6.7 KiB

title author description monikerRange ms.author ms.custom ms.date uid
General Data Protection Regulation (GDPR) support in ASP.NET Core rick-anderson Learn how to access the GDPR extension points in a ASP.NET Core web app. >= aspnetcore-2.1 riande mvc 05/29/2018 security/gdpr

EU General Data Protection Regulation (GDPR) support in ASP.NET Core

By Rick Anderson

ASP.NET Core provides APIs and templates to help meet some of the EU General Data Protection Regulation (GDPR) requirements:

  • The project templates include extension points and stubbed markup that you can replace with your privacy and cookie use policy.
  • A cookie consent feature allows you to ask for (and track) consent from your users for storing personal information. 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.
  • Cookies can be marked as essential. Essential cookies are sent to the browser even when the user hasn't consented and tracking is disabled.
  • TempData and Session cookies aren't functional when tracking is disabled.
  • The Identity manage page provides a link to download and delete user data.

The sample app allows you test most of the GDPR extension points and APIs added to the ASP.NET Core 2.1 templates. See the ReadMe file for testing instructions.

View or download sample code (how to download)

ASP.NET Core GDPR support in template generated code

Razor Pages and MVC projects created with the project templates include the following GDPR support:

  • CookiePolicyOptions and UseCookiePolicy are set in Startup.
  • The _CookieConsentPartial.cshtml partial view.
  • The Pages/Privacy.cshtml page or Views/Home/Privacy.cshtml view provides a page to detail your site's privacy policy. The _CookieConsentPartial.cshtml file generates a link to the Privacy page.
  • For apps created with individual user accounts, the Manage page provides links to download and delete personal user data.

CookiePolicyOptions and UseCookiePolicy

CookiePolicyOptions are initialized in Startup.ConfigureServices:

[!code-csharpMain]

UseCookiePolicy is called in Startup.Configure:

[!code-csharp]

_CookieConsentPartial.cshtml partial view

The _CookieConsentPartial.cshtml partial view:

[!code-html]

This partial:

  • Obtains the state of tracking for the user. If the app is configured to require consent, the user must consent before cookies can be tracked. If consent is required, the cookie consent panel is fixed at top of the navigation bar created by the _Layout.cshtml file.
  • Provides an HTML <p> element to summarize your privacy and cookie use policy.
  • Provides a link to Privacy page or view where you can detail your site's privacy policy.

Essential cookies

If consent has not been given, only cookies marked essential are sent to the browser. The following code makes a cookie essential:

[!code-csharpMain]

Tempdata provider and session state cookies are not essential

The Tempdata provider cookie isn't essential. If tracking is disabled, the Tempdata provider isn't functional. To enable the Tempdata provider when tracking is disabled, mark the TempData cookie as essential in Startup.ConfigureServices:

[!code-csharpMain]

Session state cookies are not essential. Session state isn't functional when tracking is disabled.

Personal data

ASP.NET Core apps created with individual user accounts include code to download and delete personal data.

Select the user name and then select Personal data:

Manage personal data page

Notes:

  • To generate the Account/Manage code, see Scaffold Identity.
  • Delete and download only impact the default identity data. Apps that create custom user data must be extended to delete/download the custom user data. For more information, see Add, download, and delete custom user data to Identity.
  • 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.

Encryption at rest

Some databases and storage mechanisms allow for encryption at rest. Encryption at rest:

  • Encrypts stored data automatically.
  • Encrypts without configuration, programming, or other work for the software that accesses the data.
  • Is the easiest and safest option.
  • Allows the database to manage keys and encryption.

For example:

For databases that don't provide built-in encryption at rest, you may be able to use disk encryption to provide the same protection. For example:

Additional resources