آموزش ASP.NET

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

آموزش ASP.NET

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

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

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

یکی از اطلاعات در برچسب زمان انقضاء می‏باشد، که تاریخ و زمانی که برچسب دیگر معتبر نیست را مشخص می‏کند. هر زمان که 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>

پیکربندی احراز هویت فرم‌ها

مرحله اول: آزمایش تنظیمات پیکربندی <Forms>

سیستم احراز هویت فرم‏ها درASP.NET  تعدادی تنظیمات پیکربندی ارائه می‏دهد که می‏تواند بر پایه برنامه‏نویسی انجام شود. شامل تنظیماتی مانند: چرخه حیات برچسب احراز هویت فرم‏ها، چه میزان امنیت به برچسب اعمال شود، تحت چه شرایطی برچسب احراز هویت بدون کوکی استفاده شود، نشانی صفحه ورود و اطلاعات دیگر. برای تغییر مقادیر پیش فرض، یک عنصر <forms> به عنوان فرزند عنصر <authentication> اضافه کرده و مقادیر مشخصه‏‏هایی که می‏خواهید را در قالب XML تغییر دهید، مانند:

<authentication mode="Forms">

<forms

propertyName1="value1"

propertyName2="value2"

...

propertyNameN="valueN"

/>

</authentication>

در جدول زیر خلاصه‏ای از مشخصاتی که می‏توان در عنصر <forms> به دلخواه تغییر داد، آورده شده است. از آنجایی که web.config یک فایل XML است، مشخصه‏ها به کوچک و بزرگی حروف حساس هستند.

نشانه (Attribute)

توصیف (Description)

Cookieless

این نشانه مشخص می‏کند تحت چه شرایطی برچسب احراز هویت در کوکی ذخیره شود و یا اینکه در URL درج گردد. مقادیر مجاز این نشانه عبارتند از:

UseCookiess; UseUri; AutoDetect; UseDeviceProfile (Default)

defaultUrl

اگر مقدار RedirectUrl در رشته پرس و جو مشخص نشده باشد، نشانی که کاربر بعد از وارد شدن به سایت از طریق صفحه ورود به آن هدایت می‏شود در این مشخصه نگهداری می‏شود.

Domain

وقتی از برچسب احراز هویت بر پایه کوکی استفاده می‏کنید این نشانه، نشانی کوکی را مشخص می‏کند. مقدار پیش فرض یک مقدار تهی است و بستگی دارد به اینکه مرورگر شما چه نشانی را نشان می‏دهد؛ مانند www.yourdomain.com. در این حالت وقتی درخواست subdomain ارسال می‏شود، کوکی ارسال نمی‏گردد. اگر می‏خواهید در subdomainها هم کوکی ارسال شود باید نشانی را به صورت yourdomain.com بنویسید.

enableCrossAppRedirects

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

loginUrl

نشانی صفحه ورود. مقدار پیش فرض آن login.aspx

Name

نام کوکی است، هنگامی که از برچسب احراز هویت بر پایه کوکی استفاده می‏کنید. مقدار پیش فرض آن .ASPXAUTH

Path

هنگامی که از برچسب احراز هویت بر پایه کوکی استفاده می‏کنید، این نشانه نشانی کوکی را مشخص می‏کند.

Protection

مشخص می‏کند از چه روشی برای محافظت از برچسب احراز هویت فرم‏ها استفاده شود. مقادیر مجاز عبارتند از:

All (Default); Encription; None; Validation

requireSSL

یک مقدار بولی که مشخص می‏کند یک ارتباط SSL برای ارسال کوکی نیاز دارد. مقدار پیش فرض false است.

slidingExpiration

یک مقدار بولی که مشخص می‏کند در هر بازدید کاربر از سایت در طول یک جلسه، زمان پایان کوکی از ابتدا شروع شود. مقدار پیش فرض آن false است.

Timeout

زمانی که طول می‏کشد تا کوکی برچسب احراز هویت منقضی شود را مشخص می‏کند (به دقیقه). مقدار پیش فرض 30 است.

مرحله پنجم: خروج

علاوه بر متدهایی برای ورود کاربر، کلاس FormsAuthentication یک متد SignOut نیز فراهم می‏کند. متد SignOut به راحتی برچسب احراز هویت فرم‏ها را خراب می‏کند و باعث خروج کاربر از سایت می‏شود.

کنترل LoginStatus بسته به وضعیت شناسایی کاربر یکی از این دو پیوند را نمایش می‏دهد: ورود و یا خروج. کلیک کردن بر روی پیوند ورود، باعث هدایت کاربر به صفحه ورود می‏شود. کلیک کردن پیوند خروج باعث می‏شود کنترل LoginStatus متد FormsAuthentication.SignOff را فراخوانی کرده و سپس کاربر را به یک صفحه هدایت کند. صفحه‏ای که کاربر خارج شده به آن هدایت می‏شود به مشخصه LogoutAction بستگی دارد، که می‏تواند یکی از سه مقدار زیر را داشته باشد:

·    Refresh: پیش فرض؛ کاربر را به صفحه‏ای که در حال دیدن آن بوده هدایت می‏کند. اگر کاربر ناشناس اجازه دیدن آن صفحه را نداشته باشد، FormsAuthenticationModule به طور خودکار کاربر را به صفحه ورود هدایت می‏کند.

·    Redirect: کاربر به صفحه‏ای که در مشخصه LogoutPageUrl کنترل LoginStatus مشخص شده هدایت می‏شود.

·    RedirectToLoginPage: کاربر به صفحه ورود هدایت می‏شود.

اجازه دهید یک کنترل LoginStatus به مسترپیج اضافه کنیم و آن را با استفاده از گزینه Redirect پیکربندی نموده، به طوری که کاربر به صفحه‏ای که پیامی مبنی بر تایید خروج کاربر نمایش می‏دهد؛ فرستاده شود. یک صفحه جدید به ریشه اضافه کرده و نام آن را Logout.aspx بگذارید. یادتان باشد که مسترپیج به آن اعمال شود. در صفحه جدید متنی مبنی بر تایید خروج کاربر بنویسید.

سپس در صفحه مسترپیج یک کنترل LoginStatus در زیر کنترل LoginView در داخل LoginContent اضافه کنید. در پایان باید کدهای صفحه به صورت زیر باشد:

<div id="navigation">

<asp:ContentPlaceHolder ID="LoginContent" runat="server">

<asp:LoginView ID="LoginView1" runat="server">

<LoggedInTemplate>

Welcome back,

<asp:LoginName ID="LoginName1" runat="server" />

</LoggedInTemplate>

<AnonymousTemplate>

Hello, stranger.

<asp:HyperLink ID="lnkLogin" runat="server" NavigateUrl="~/Login.aspx">Log In</asp:HyperLink>

</AnonymousTemplate>

</asp:LoginView>

<br />

<asp:LoginStatus ID="LoginStatus1" runat="server" LogoutAction="Redirect" LogoutPageUrl="~/Logout.aspx" />

<br /><br />

</asp:ContentPlaceHolder>

TODO: Menu will go here...

</div>