آموزش ASP.NET

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

آموزش ASP.NET

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

مرحله چهارم: تشخیص بازدیدکنندگان احراز هویت شده و تصمیم گیری در

آنچه مسلم است، ما باید اطلاعات متفاوتی به کاربران شناسایی شده و کاربران ناشناس نمایش دهیم. علاوه بر این اغلب اوقات ما نیاز داریم که مشخصات کاربر شناسایی شده را بدانیم. 

اجازه دهید برای شرح دادن این شیوه صفحه Default.aspx را تکمیل کنیم. در صفحه Default.aspx دو کنترل Panel اضافه کنید؛ یکی به نام AuthenticatedMessagePanel و دیگری به نام AnonymousMessagePanel. یک کنترل Lable به نام WelcomeBackMessage  در داخل Panel اول اضافه کنید. در داخل Panel دوم یک کنترل Hyperlink اضافه کنید و مشخصه Text آن را به Log In و مشخصه NavigateUrl آن را به ~/Login.aspx تغییر دهید. در این حالت کدهای صفحه Default.aspx باید به صورت زیر باشد:

<%@ Page Language="C#" MasterPageFile="~/Site.master" AutoEventWireup="true" CodeFile="Default.aspx.cs" Inherits="_Default" Title="Untitled Page" %>

<asp:Content ID="Content1" ContentPlaceHolderID="MainContent" Runat="Server">

<asp:Panel runat="server" ID="AuthenticatedMessagePanel">

<asp:Label runat="server" ID="WelcomeBackMessage"></asp:Label>

</asp:Panel>

<asp:Panel runat="Server" ID="AnonymousMessagePanel">

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

</asp:Panel>

</asp:Content>

مشخصه Request.IsAuthenticated یک مقدار بولی که تعیین می‏کند درخواست احراز هویت شده است یا نه، را برمی‏گرداند.

کدهای زیر را در رویداد Page_Load بنویسید:

protected void Page_Load(object sender, EventArgs e)

{

if(Request.IsAuthenticated)

{

WelcomeBackMessage.Text = "Welcome back!";

AuthenticatedMessagePanel.Visible = true;

AnonymousMessagePanel.Visible = false;

 

else

{

AuthenticatedMessagePanel.Visible = false;

AnonymousMessagePanel.Visible = true;

}

}

با فرض اینکه شما هنوز وارد سایت نشده‏اید، با اجرای صفحه Default.aspx یک پیوند به صفحه Login می‏بینید (شکل زیر). 

 

 

 

با استفاده از مشخصه User شیء Httpcontext می‏توانیم کاربر جاری را شناسایی کنیم. شیء Httpcontext اطلاعاتی در مورد درخواست جاری نمایش می‏دهد. همچنین این شیء مکانی برای اشیاء عمومیASP.NET  مانند Response، Request و Session و غیره می‏باشد.

مشخصه User به وسیله FormsAuthenticationModule تنظیم می‏شود. به ویژه، هنگامی که FormsAuthenticationModule یک برچسب احراز هویت فرم‏ها در داخل درخواست وارد شده پیدا می‏کند، یک شیء جدید از GenericPrincipal ایجاد و آن را به مشخصه User نسبت می‏دهد.

اشیاء Principal (مانند GenericPrincipal) اطلاعاتی درباره مشخصات کاربر و نقشی که به آن تعلق دارند را تهیه می‏کنند. برای واسط IPrincipal دو عضو تعریف گردیده است:

·    IsInRole(roleName): یک متد است که یک مقدار بولی که نشان می‏دهد که Principal متعلق به نقش مشخص شده هست یا نه، را برمی‏گرداند.

·    Identity: یک مشخصه است که یک شیء که رابط IIdentity را پیاده سازی می‏کند را برمی‏گرداند. برای IIdentity سه مشخصه تعریف شده است: AuthenticationType، IsAuthenticated و Name.

ما با استفاده از کد زیر می‏توانیم نام بازدید کننده جاری را به دست آوریم:

string currentUserName = User.Identity.Name;

وقتی از احراز هویت فرم‏ها استفاده می‏شود یک شیء FormsIdentity برای مشخصه GenericPrincipal’s Identity ایجاد می‏شود. کلاس FormsIdentity همیشه برای مشخصه AuthenticationType رشته "Forms" و برای مشخصه IsAuthenticated مقدار true را برمی‏گرداند. مشخصه Name نام کاربری که هنگام ایجاد برچسب احراز هویت فرم‏ها مشخص شده است را برمی‏گرداند.

حالا صفحه Default.aspx را طوری تغییر می‏دهیم که جمله خوش آمدگویی شامل نام کاربر نیز باشد. بدین منظور کد زیر را در رویداد Page_Load قرار می‏دهیم:

WelcomeBackMessage.Text = "Welcome back, " + User.Identity.Name + "!";

ایمن سازی صفحه ورود

وقتی که کاربر اعتبارنامه‏اش که شامل نام کاربری و رمز عبور است را وارد و فرم صفحه ورود را ارسال می‏کند، اعتبارنامه از طریق اینترنت و به صورت متن ساده به وب سرور انتقال می‏یابد. آن به این معنی است که هر هکری که در حال نظارت بر ترافیک شبکه است می تواند نام کاربری و رمز عبور را ببیند. برای جلوگیری از این مشکل، باید ترافیک شبکه را با استفاده از SSL[1] رمزدار کنیم. این تضمین می‏کند که اعتبارنامه (همچنین نشانه‏گذاری‏های صفحه HTML) از لحظه‏ای که مرورگر را ترک می‏کنند تا لحظه‏ای که به وسیله وب سرور دریافت می‏شوند، رمز گذاری شده‏اند. اگر وب سایت شما دارای اطلاعات حساس نباشد، شما فقط در صفحه ورود و صفحات دیگری که رمز عبور کاربر را دارد، نیاز دارید که از SSL استفاده کنید، و صفحات دیگر به صورت متن ساده ارسال می‏شوند. تا زمانی که، به طور پیش فرض، از دو روش رمزگذاری و امضاء دیجیتالی (برای جلوگیری از دستکاری) استفاده می‏شود، لازم نیست که نگران امنیت برچسب احراز هویت فرم‏ها باشید.



[1] Secure Socket Layers

ورود کاربر

با فرض اینکه اعتبارنامه های وارد شده معتبر هستند، باید یک برچسب احراز هویت فرم‏ها ایجاد شود، تا به وسیله آن کاربر وارد سایت گردد. کلاس FormsAuthentication در فضای نام System.Web.Security متدهای متفاوتی برای ورود و خروج کاربران از طریق سیستم احراز هویت فرم‏ها، در اختیار قرار می‏دهد. با وجود اینکه چندین متد در کلاس FormsAuthentication وجود دارد، برای ما سه متد از آنها جالب هستند که عبارتند از:

·    GetAuthCookie (username, persistCookie):  این متد یک برچسب احراز هویت فرم‏ها ایجاد می‏کند که نام کاربری نامیده می‏شود. سپس، این متد یک شیء HttpCookie که محتویات برچسب احراز هویت را نگهداری می‏کند، ایجاد و آن را برمی‏گرداند. اگر مقدار persistCookie برابر true باشد، یک کوکی پایدار ایجاد می‏شود.

·    SetAuthCookie (username, persistCookie): این متد، متد GetAuthCookie را فراخوانی می‏کند تا کوکی احراز هویت فرم‏ها را تولید کند. سپس این متد کوکی برگردانده شده توسط GetAuthCookie را به مجموعه Cookies اضافه می‏کند (با فرض اینکه احراز هویت فرم‏ها بر پایه کوکی به کار گرفته شده باشد؛ در غیر این صورت، این متد یک کلاس داخلی که برچسب منطقی بدون کوکی ایجاد می‏کند را فراخوانی می‏کند).

·    RedirectFormLoginPage (username, persistCookie): این متد، متد SetAuthCookie را فراخوانی می‏کند و بعد از آن کاربر را به صفحه مورد نظر هدایت می‏نماید.

GetAuthCookie وقتی سودمند است که شما نیاز دارید برچسب احراز هویت را قبل از اینکه کوکی خارج از مجموعه کوکی‏ها بنویسید، تغییر دهید. اگر شما بخواهید برچسب احراز هویت فرم‏ها ایجاد و آن را به مجموعه کوکی‏ها اضافه کنید، اما نخواهید کاربر را به صفحه مورد نظر هدایت کنید، SetAuthCookie کاربرد دارد. ممکن است شما بخواهید آنها را در صفحه ورود نگهدارید و یا به صفحات جایگزین بفرستید.

زمانی که ما می‏خواهیم کاربر وارد و به صفحه مورد نظر هدایت شود، از RedirectFormLoginPage استفاده می‏کنیم. در رویداد LoginButton’s Click دو خط TODO را با دستور زیر جابجا می‏کنیم:

FormsAuthentication.RedirectFromLoginPage(UserName.Text, RememberMe.Checked);

وقتی که برچسب احراز هویت فرم‏ها را ایجاد می‏کنیم از مشخصه متن جعبه متن UserName برای پارامتر username و وضعیت چک باکس RememberMe برای پارامتر persistCookie برچسب احراز هویت استفاده می‏کنیم.