پشتیبانی توکار از GDPR در ASP.NET Core 2.1
اندازه‌ی قلم متن
تخمین مدت زمان مطالعه‌ی مطلب: سه دقیقه

دیروز (25 ماه May سال 2018) اولین روز فعالسازی GDPR یا General Data Protection Regulation بود و به همین خاطر است که اگر به سرویس‌های مهم اینترنتی دقت کرده باشید، پر شده‌است از پیام‌هایی مانند «ما از کوکی استفاده می‌کنیم»، «ما اطلاعات شما را به این صورت ذخیره می‌کنیم» و امثال آن. همچنین تعداد زیادی از سرویس‌های اینترنتی نیز به کاربران خود پیام‌هایی را جهت تائید قوانین جدید رعایت حریم خصوصی آن‌ها ارسال کرده‌اند. برای مثال اگر این قوانین جدید را تائید نکنید، از دریافت بسیاری از خبرنامه‌ها محروم خواهید شد. این مورد نیز از بخش‌نامه‌ی اتحادیه‌ی اروپا نشات می‌گیرد که از روز جمعه ۲۵ می‌(۴ خرداد) تمامی شرکت‌ها، افراد، وب‌سایت‌ها و ارائه‌دهندگان خدمات آنلاین، موظف به رعایت آن هستند. موضوع بخش‌نامه قبل از هرچیزی، حفاظت از اطلاعات خصوصی کاربران است. نهادها و شرکت‌ها و وب‌سایت‌هایی که تا ۲۵ می‌۲۰۱۸ زمینه اجرای این بخش‌نامه را فراهم نکرده باشند، در خطر جریمه‌های سنگین هستند. بخش‌نامه جدید حریم خصوصی اطلاعات، تعیین می‌کند که چه میزان اطلاعاتی درباره‌ی هرکسی می‌تواند جمع‌آوری و بررسی شود، مورد پردازش قرار گیرد و البته تبدیل به پول شود. این بخش‌نامه حق تک‌تک کاربران، بر اطلاعات‌شان را تقویت می‌کند. کاربران حالا حق بیشتری بر اطلاعات‌شان، برای «پاک کردن» آن‌ها و «پس‌گرفتن» آن‌ها دارند. البته آن‌چه که احتمالا برای همه قابل رؤیت خواهد بود توضیحات مربوط به حفاظت از اطلاعات در وبسایت‌ها است. این توضیحات باید جزئی‌تر و دقیق‌تر و برای مخاطبان قابل فهم‌تر باشند و این به این معنا است که این توضیحات به‌مراتب طولانی‌تر خواهند شد.
در این بین اگر به قالب پیش‌فرض پروژه‌های MVC تولید شده‌ی توسط ASP.NET Core 2.1 نیز دقت کنید، پشتیبانی توکار از پیشنیازهای GDPR در آن لحاظ شده‌است؛ چه از لحاظ گوشزد کردن شرایط حریم خصوصی و پذیرش آن و چه از لحاظ «پاک کردن» و «پس گرفتن» اطلاعات شخصی.


قالب و کوکی پذیرش شرایط حریم خصوصی سایت (Cookie Consent)


اگر قالب پیش‌فرض یک پروژه‌ی ASP.NET Core 2.1 را اجرا کنید، تصویر فوق را که در آن نوار پذیرش شرایط حریم خصوصی سایت در بالای صفحه درج شده‌است، مشاهده خواهید کرد.
قالب جدید نوار پذیرش شرایط حریم خصوصی در مسیر Views\Shared\_CookieConsentPartial.cshtml واقع شده‌است و در فایل layout برنامه توسط tag helper جدید Partial، رندر و نمایش داده می‌شود:
<partial name="_CookieConsentPartial" />
در ابتدای این partial view، یک چنین کدهایی درج شده‌اند:
@using Microsoft.AspNetCore.Http.Features
@{
  var consentFeature = Context.Features.Get<ITrackingConsentFeature>();
  var showBanner = !consentFeature?.CanTrack ?? false;
  var cookieString = consentFeature?.CreateConsentCookie();
}
بنابراین پذیرش شخص را در یک کوکی درج می‌کند و در دفعات بعدی بازدید او بر اساس این کوکی است که در مورد نمایش یا عدم نمایش این نوار پذیرش شرایط، تصمیم گیری خواهد شد. این کوکی نیز که تحت عنوان میان‌افزار CookiePolicy در سیستم مدیریت و پردازش می‌شود، به صورت زیر در فایل آغازین برنامه مدیریت می‌گردد:
الف) تنظیم نیاز به دریافت پذیرش
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;
   });
ب) فعالسازی میان‌افزار مدیریت کوکی پذیرش شرایط حریم خصوصی
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
   // ...
   app.UseCookiePolicy();


دادن حق فراموش شدن به کاربران

علاوه بر Cookie Consent فوق که در یک قالب ابتدایی MVC نیز درج شده‌است، در قالب پروژه‌های ASP.NET Core Identity، دو گزینه‌ی جدید دریافت اطلاعات شخصی و همچنین حذف اکانت (دادن حق فراموشی به کاربران) نیز پیش‌بینی شده‌است: PersonalData.cshtml


البته این صفحه جزو بسته‌ی جدید Microsoft.AspNetCore.Identity.UI است که به همراه ASP.NET Core 2.1 ارائه می‌شود:
 dotnet add package Microsoft.AspNetCore.Identity.UI --version 2.1.0-rc1-final
در این بسته تمام کدها و صفحات مخصوص Identity به داخل یک Class library جدید منتقل شده‌اند و دیگر جزو قالب پروژه‌ی «dotnet new mvc --auth Individual» یا همان تنظیم اعتبارسنجی به individual user accounts نیستند و باید به صورت جداگانه دریافت و تنظیم شوند (اختیاری است).
  • #
    ‫۶ سال و ۳ ماه قبل، دوشنبه ۷ خرداد ۱۳۹۷، ساعت ۰۲:۴۲
    سلام
    یه سوال داشتم میشه از Microsoft.AspNetCore.Identity در پروژه MVC استفاده کرد؟ یا حتما باید پروژه .net Core باشه؟
    • #
      ‫۶ سال و ۳ ماه قبل، دوشنبه ۷ خرداد ۱۳۹۷، ساعت ۰۳:۱۹
      بسته‌ی AspNetCoreCompat آن برای MVC 5x هست (البته پشتیبانی آنچنانی هم ندارد) و در کل خیر. معماری این‌ها یکی نیست. وابستگی‌های این‌ها یکی نیست. از دیدگاه مایکروسافت، MVC 5x در فاز نگهداری هست و نه توسعه‌ی اصلی. حتی قصد بازنشسته کردن Full .NET framework را با NET Core 3. دارند. قسمت‌های باقیمانده‌ی Full .NET framework که در NET Core. نیست، همان قسمت‌های دسکتاپ هستند (WPF و WinForms). این‌ها را هم قصد دارند در نگارش 3 به NET Core. اضافه کنند (به صورت غیرچندسکویی و فقط مختص ویندوز) که معنای غیرمستقیم آن هدایت توسعه دهندگان دات نت به صرفا NET Core. هست.
  • #
    ‫۶ سال و ۳ ماه قبل، دوشنبه ۷ خرداد ۱۳۹۷، ساعت ۲۱:۱۴
    تو آخرین نسخهnet core. پوشه views تبدیل شده به pages.
    • #
      ‫۶ سال و ۳ ماه قبل، دوشنبه ۷ خرداد ۱۳۹۷، ساعت ۲۳:۰۳
      آن مدل دیگر کار با ASP.NET Core هست به نام «صفحات Razor».
  • #
    ‫۶ سال و ۳ ماه قبل، جمعه ۱۱ خرداد ۱۳۹۷، ساعت ۱۴:۴۷
    یک نکته‌ی تکمیلی: تاثیر فعالسازی GDPR بر روی ذخیره سازی کوکی‌ها در کل برنامه

    اگر GDPR را فعال کرده باشید، مشاهده خواهید کرد که برای مثال در یک برنامه‌ی مبتنی بر ASP.NET Core Identity دیگر نمی‌توانید لاگین کنید. علت اینجا است که تا زمانیکه کاربر بر روی پذیرش GDPR کلیک نکند، دیگر هیچ کوکی توسط برنامه ثبت نخواهد شد.
    اگر فکر می‌کنید یک چنین کوکی اساسی است و صرفنظر از رضایت کاربر حتما باید ثبت شود، نیاز است مقدار خاصیت IsEssential شیء CookieBuilder را به true تنظیم کنید:
    services.ConfigureApplicationCookie(options =>
    {
        options.LoginPath = "/Users/Login";
        // ...
        options.Cookie = new CookieBuilder
        {
            // ...
            IsEssential = true //  this cookie will always be stored regardless of the user's consent
        };
    });
    
    // The following code makes a cookie essential:
    context.Response.Cookies.Append("Test", "Value", new CookieOptions { IsEssential = true }); 
    
    // TempData cookies are non-essentials too + Session state cookies
    services.Configure<CookieTempDataProviderOptions>(options => { options.Cookie.IsEssential = true; });
  • #
    ‫۵ سال و ۳ ماه قبل، یکشنبه ۱۹ خرداد ۱۳۹۸، ساعت ۱۴:۴۸
    یکی از مشکلاتی که در Asp.net core 2.1 با آن برخورد کردیم نال بودن tempdata بعد از مقدار دهی بود. این مورد زمانی پیش می‌آید که استفاده از GDPR فعال باشد و از ایجاد کوکی‌های دیگر  جلوگیری کند. بدین جهت برای فعال کردن کلیه tempdata‌های برنامه نیاز است که IsEssential به طور پیش فرض فعال گردد. پس کد زیر را به فایل startup اضافه میکنیم:
         services.Configure<CookieTempDataProviderOptions>(options =>
                {
                    options.Cookie.IsEssential = true;
                });
    از این پس tempdata فعال میگردد و مقدار نال نخواهد داشت.