وقتی asp.net core identity را بررسی کردیم، دیدیم که چگونه میانافزار کوکی، دادههای کاربر و یک کوکی رمزگذاری شده را ذخیره میکند و با هر درخواست ارسال میکند. برای احراز هویت مبتنی بر توکن، ما همچنین از میان افزار کوکی به عنوان یک ویژگی مستقل برای ورود به سیستم محلی استفاده کردیم.
این کوکی ها حاوی اطلاعات ارزشمندی هستند و باید محافظت شوند.
بیایید کلاس Startup.cs پروژه Tutorial.AspNetSecurity.WebClient را باز کنیم، سپس نگاهی دقیقتر به گزینههای میانافزار کوکی بیندازیم.
در متد Configure، کد ما برای افزودن احراز هویت کوکی قرار دارد.
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationScheme = "Cookies"
});
دو گزینه (option) برای محافظت از کوکی ها وجود دارد. CookieHttpOnly به مرورگر میگوید که کوکی توسط اسکریپتهای سمت کلاینت قابل دسترسی نیست، کوکی به عنوان یک هدر HTTP ارسال میشود و نمیتواند توسط کدهای مخرب جاوا اسکریپت مورد هدف قرار گیرد. این ویژگی به طور پیشفرض روی true تنظیم شده است، بنابراین نیازی به تنظیم صریح آن نداریم، فقط مطمئن شوید که مقدار آن روی false تنظیم نشده است. این می تواند منجر به سرقت کوکی از طریق حملات اسکریپت بین سایتی (cross-site scripting attacks) شود.
گزینه بعدی CookieSecure است. مقدار این گزینه یک Enum است که به مرورگر میگوید از کوکیهای امنی که فقط از طریق HTTPS ارسال میشوند استفاده کند. وقتی کوکیهای امن در حال انتقال هستند، مهاجمان نمیتوانند استراق سمع کنند. به طور پیش فرض، مقدار CookieSecure روی SameAsRequest تنظیم شده است که از همان پروتکل درخواست استفاده می کند. مقدار Always، امن ترین گزینه است، زیرا در این صورت کوکی هرگز از طریق یک اتصال HTTP ناامن ارسال نمی شود. این همان کاری است که وقتی محیط تولید شما بر روی SSL اجرا می شود، باید انجام دهید. همچنین می توانیم این گزینه را به صورت پویا بر اساس محیطی که برنامه را در آن اجرا می کنیم تغییر دهیم.
بنابراین، اگر در حال توسعه هستیم، میتوانیم از تنظیمات پیشفرض SameAsRequest استفاده کنیم.
در غیر این صورت، مطمئن می شویم که کوکی همیشه امن است و به طور تصادفی از طریق یک کانال ناامن ارسال نمی شود.
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationScheme = "Cookies",
CookieHttpOnly = true,
CookieSecure = env.IsDevelopment()?
Microsoft.AspNetCore.Http.CookieSecurePolicy.SameAsRequest :
Microsoft.AspNetCore.Http.CookieSecurePolicy.Always
});
هنگام کار با کوکی ها نیز روال خوبی است که آنها را پس از مدتی منقضی کنید تا برای مدت طولانی در مرورگر باقی نمانند. ست کردن مشخصه ExpireTimeSpan یکی از راه هایی است که می توانیم طول عمر کوکی ها را تنظیم کنیم. تنظیم می کنیم تا کوکی 12 ساعت پس از ایجاد آن منقضی شود. پس از 12 ساعت کوکی توسط مرورگر پاک می شود و کاربر باید دوباره وارد سیستم شود.
app.UseCookieAuthentication(new CookieAuthenticationOptions
{
AuthenticationScheme = "Cookies",
CookieHttpOnly = true,
CookieSecure = env.IsDevelopment() ?
Microsoft.AspNetCore.Http.CookieSecurePolicy.SameAsRequest :
Microsoft.AspNetCore.Http.CookieSecurePolicy.Always,
ExpireTimeSpan = new TimeSpan(12, 0, 0)
});