آموزش ASP.NET

آموزش ASP.NET متفاوت از آنچه جاهای دیگر می بینید!

آموزش ASP.NET

آموزش ASP.NET متفاوت از آنچه جاهای دیگر می بینید!

مرحله دوم: استفاده از برچسب احراز هویت فرم‌ها بدون کوکی

به طور پیش فرض سیستم احراز هویت فرم‌ها تعیین می‌کند چه موقع برچسب احراز هویت خود را در مجموعه کوکی‌ها نگهداری کند و یا در نشانی صفحه درج کند. تمام مرورگرهای اصلی کامپیوترهای رومیزی مانند: Opera, Internet Explorer, FireFox و Safari کوکی‌ها را پشتیبانی می‌کنند، اما تمام وسایل موبایل این کار را انجام نمی‌دهند.

مشخصه cookieless در عنصر <forms> می‌تواند دارای یکی از موارد زیر باشد:

·    UseCookie: مشخص می‌کند که همیشه برچسب احراز هویت بر پایه کوکی استفاده شود.

·    UseUri: تعیین می‌کند که برچسب احراز هویت بر پایه کوکی هرگز استفاده نشود.

·    AutoDetect: اگر وسیله، کوکی را پشتیبانی نکند از برچسب احراز هویت بر پایه کوکی استفاده نمی‌شود؛ اگر کوکی را پشتیبانی کند و اگر کوکی‌ها توانا باشد، یک مکانیزم کاوش برای تعیین، به کار گرفته می‌شود.

·    UseDeviceProfile: گزینه پیش فرض، فقط اگر وسیله کوکی را پشتیبانی کند از برچسب احراز هویت برپایه کوکی استفاده می‌شود. مکانیزم کاوش استفاده نمی‌شود.

AutoDetect و UserDeviceProfile با استناد به توانایی‌های وسیله معین می‌کنند که از برچسب احراز هویت بر پایه کوکی استفاده کند و یا از بدون کوکی. ASP.NET یک پایگاه داده از وسایل مختلف و مشخصات آنها مانند: پشتیبانی کوکی، نسخه جاوا اسکریپت و غیره دارد. هر زمان که یک وسیله یک درخواست برای صفحه وب به وب سرور می‌فرستد آن یک سرآیند HTTP شبکه نورد برای شناسایی نوع وسیله ارسال می‌کند.

استفاده از صفحه دیگری برای ورود به غیر از Login.aspx

برای هدایت خودکار کاربر ناشناس به صفحه ورود، FormsAuthenticaionModule باید نشانی صفحه ورود را بداند. این نشانی در مشخصه loginUrl در عنصر <forms> مشخص می‌شود و به طور پیش فرض “login.aspx” است. اگر سایت شما موجود است، ممکن است نشانی صفحه ورود آن متفاوت از “login.aspx” باشد، و این صفحه توسط موتورهای جستجو، شماره و نشانه گذاری شده باشد. پس به جای اینکه نام صفحه موجود را به “login.aspx” تغییر دهید و باعث خرابی پیوندهای موجود به آن شوید، می‌توانید ویژگی loginUrl را به صفحه ورود خودتان تغییر دهید.

برای مثال، اگر نام صفحه ورود شما SignIn.asp و در پوشه User قرار داده شده باشد، می‌توانید ویژگی loginUrl را به نشانی زیر پیکربندی کنید:

“~/Users/SignIn.aspx”

 

و در Web.cofig این تغییرات مشاهده می‌شود:

<authentication mode="Forms">

<forms

loginUrl="~/Users/SignIn.aspx"

/>

</authentication

مشخص نمودن زمان انقضاء برچسب

برچسب احراز هویت فرم‏ها یک نشانه است که هرگونه خصوصیتی را نمایش می‏دهد. با برچسب احراز هویت بر پایه کوکی، این نشانه در یک قالب از یک کوکی نگهداری می‏شود و در هر درخواست به وب سرور ارسال می‏شود. در اختیار داشتن این نشانه، اعلان می کند که: "من کاربر هستم، در حال حاضر وارد سیستم شده ام." و برای اینکه هویت کاربر در تمام صفحاتی که بازدید می‏کند، قابل تشخیص باشد، استفاده می‏شود. برچسب احراز هویت فرمها فقط شامل مشخصات کاربر نیست، بلکه حاوی اطلاعاتی برای کمک به ایمنی و بی‏نقصی نشانه می‏باشد.

یکی از اطلاعات در برچسب زمان انقضاء می‏باشد، که تاریخ و زمانی که برچسب دیگر معتبر نیست را مشخص می‏کند. هر زمان که FormsAuthenticationMadule یک برچسب احراز هویت را بررسی می‏کند، مراقبت می‏کند که زمان انقضاء برچسب هنوز نگذشته باشد. اگر گذشته باشد، برچسب را نادیده می‏گیرد و با کاربر به عنوان یک فرد ناشناس برخورد می‏کند. این روش به حفاظت کردن در مقابل حملات کمک می‌کند. بدون زمان انقضاء، اگر یک هکر بتواند به برچسب احراز هویت معتبر کاربر دست پیدا کند، مثلا از طریق دسترسی فیزیکی به کامپیوتر و از آن طریق به پوشه کوکی‌ها، می‌تواند با استفاده از این برچسب احراز هویت دزدیده شده یک درخواست به سرور ارسال کرده و داخل سایت شود. وقتی که برچسب احراز هویت ایجاد می‌شود، سیستم احراز هویت فرم‌ها با نگاهی به تنظیمات timeout درباره زمان انقضاء آن تصمیم می‌گیرد. همانطور که در جدول بالا ذکر شده، مقدار پیش فرض تنظیم timeout 30 دقیقه است، و به این معنی است که وقتی برچسب احراز هویت فرم‌ها ایجاد شد، زمان زمان انقضاء آن برای 30 دقیقه بعد تنظیم می‌شود.

زمان انقضاء، یک زمان قطعی در آینده را برای منقضی شدن برچسب احراز هویت مشخص می‌کند. اما معمولا توسعه‌دهندگان می‌خواهند از زمان انقضاء تبدیلی استفاده کنند، یعنی اینکه در هربار که کاربر سایت را می‌بیند، برچسب از ابتدا زمان‌دهی شود. این خواسته با تنظیمات slidingExpiration قابل انجام است. اگر برابر true قرار داده شود، هر زمان که FormsAuthenticationModule یک کاربر را شناسایی می‌کند، زمان انقضاء برچسب را به روز می‌کند. اگر برابر false (پیش فرض) قرار داده شود، زمان انقضاء در هر درخواست به روز نمی‌شود، در نتیجه برچسب دقیقا بعد از اتمام timeout که از هنگام ایجاد شدن شروع شده است، منقضی می‌شود.  

 

در شکل زیر : زمان انقضاء برچسب احراز هویت وقتی slidingExpiration برابر false است.

  

  

 

در شکل زیر: زمان انقضاء برچسب احراز هویت وقتی slidingExpiration برابر true است.

 

 

 

 

وقتی از برچسب احراز هویت بر پایه کوکی (پیش فرض) استفاده می‌کنید، این بحث مقداری گیج کننده می‌شود، زیرا خود کوکی نیز می‌تواند زمان انقضاء داشته باشد. زمان انقضاء کوکی به مرورگر می‌فهماند که چه زمانی باید آن را نابود کند. اگر یک کوکی ناقص بود (زمان انقضاء آن مشخص نبود) وقتی مرورگر بسته می‌شود نابود می‌گردد. اگر زمان انقضاء کوکی مشخص شده باشد در کامپیوتر کاربر نگهداری می‌شود تا زمان مشخص شده سپری گردد، سپس نابود می‌شود. وقتی کوکی توسط مرورگر نابود شود، دیگر به سرور فرستاده نمی‌شود، بنابراین، نابود شدن کوکی مانند خارج شدن کاربر از سایت است.

اجازه دهید زمان انقضاء برچسب در سایت خودمان را با استفاده از زمان انقضاء تبدیلی، به یک ساعت تغییر دهیم. برای این منظور باید تغییراتی در فایل Web.config بدهیم.

<authentication mode="Forms">

<forms

slidingExpiration="true"

timeout="60"

/>

</authentication>