آموزش ASP.NET

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

آموزش ASP.NET

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

مفهوم جریان احراز هویت فرم‏ها

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

ماژول‏های HTTP کلاس‏هایی که کدهای آنها در جواب یک رویداد خاص در چرخه حیات درخواست اجرا می‏شوند را مدیریت می‏کنند. در پشت پردهASP.NET  همراه با ماژول‏های HTTP فرستاده می‏شود. دو ماژول درون HTTP که به طور ویژه به بحث ما مربوط می‏شوند عبارتند از:

·    FormsAuthenticaionModule: با بررسی برچسب احراز هویت فرم‏ها، که معمولا در مجموعه‏ی کوکی‏های کاربر وجود دارد، کاربر را احراز هویت می‏کند. اگر برچسب احراز هویت ارائه نشود، کاربر ناشناس قلمداد می‏شود.

·    UrlAuthorizationModule: در هر زمان تعیین می‏کند کاربر جاری مجاز به دسترسی به نشانی درخواست شده است یا خیر. این ماژول مجوز را با بررسی نقش‏های مجوزدهی در فایل پیکربندی برنامه صادر می‏کند.

FormsAuthenticaionModule تلاش می‏کند کاربر را قبل از اجرای UrlAuthorizationModule احراز هویت کند. اگر درخواست کاربر مجاز به دسترسی به منبع درخواست شده نباشد، ماژول مجوزدهی به درخواست پایان می‏دهد و وضعیت HTTP 401 Unauthorized را می‏گرداند. در روش احراز هویت Windows وضعیت HTTP 401 به مرورگر برگردانده می‏شود. این کد وضعیت باعث می‏شود مرورگر کاربر را به وارد کردن اعتبارنامه‏اش از طریق یک کادر محاوره‏ای وادار کند. اما با احراز هویت فرم‏ها، وضعیت HTTP 401 Unauthorized هیچ وقت به مرورگر فرستاده نمی‏شود، در عوض FormsAuthenticaionModule این وضعیت را کشف کرده و آن را با هدایت کاربر به صفحه ورود اصلاح می‏کند.

صفحه ورود مسئولیت دارد اعتبار کاربر را تعیین کند، اگر معتبر بود، یک برچسب احراز هویت فرم‏ها ایجاد کند و کاربر را به صفحه‏ای که می‏خواسته ببیند هدایت کند. 

حساب‏های کاربری و نقش‏ها

احراز هویت فرم‏هایASP.NET  یک بستر برای ورود کاربران به یک سایت تهیه می‏کند و وضعیت شناسایی شده آنها را هنگام دیدن صفحات مختلف سایت نگهداری می‏نماید. مجوزدهی URL یک بستر برای دسترسی محدود به فایل‏ها یا پوشه‏های مشخص شده در یک برنامه کاربردیASP.NET  ارائه می‏دهد. بدون این ویژگی‏ها، باز هم، یک ابزار برای ذخیره اطلاعات حساب کاربر و یا مدیریت نقش‏ها فراهم می‏کند.

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

امروزه، حساب کاربران در برنامه‏هایASP.NET  با استفاده از «قالب عضویت»[1] و کنترل‏های موجود Login Web به صورت خیلی راحت و ساده انجام می‏شود. قالب عضویت از چندین کلاس در فضای نام System.Web.Security تشکیل شده است. این قالب عملیات برای ایجاد ارتباطات ضروری در حساب کاربران را در اختیار قرار می‏دهد. کلاس کلیدی در قالب عضویت کلاس عضویت[2] است که دارای متد زیر می‏باشد:

·    ایجاد کاربر

·    حذف کاربر

·    واکشی تمام کاربران

·    واکشی کاربر

·    به روز رسانی کاربر

·    احراز هویت کاربر

قالب عضویت از مدل تهیه کننده[3] استفاده می‏کند که باعث می‏شود رابط برنامه کاربردی از عملیات انجام گرفتن آن به طور کامل جدا گردد.  

 

این ویژگی توسعه دهندگان را قادر می‏سازد از یک رابط کاربردی عمومی استفاده کنند، ولی این توانایی را به آنها می‏دهد که متناسب با نیاز مشتری که از سایت آنها بازدید می‏کند آن را پیاده سازی کنند. به طور خلاصه، کلاس عضویت عملکردهای ضروری قالب (متدها، مشخصات و رویدادها) را تعریف می‏کند اما در واقع جزییات پیاده‏سازی را عرضه نمی‏کند. در عوض متدهای کلاس عضویت ارائه دهنده پیکربندی را فراخوانی می‏کنند. برای مثال، وقتی متد ایجاد کاربر کلاس عضویت فراخوانی می‏شود، کلاس عضویت جزییات ذخیره کردن کاربر را نمی‏داند. کلاس عضویت نمی‏داند کاربران در کجا نگهداری می‏شوند (پایگاه داده و یا یک فایل XML و یا در دیگر محل‏های نگهداری). کلاس عضویت برای اینکه تصمیم بگیرد کدام ارائه دهنده را فراخوانی کند، پیکربندی برنامه کاربردی وب را بررسی می‏کند و کلاس تهیه کننده به صورت عملی باید یک حساب کاربری جدید در محل نگهداری مناسب ایجاد کند. این برهم‏کنش‏ها به صورت مثال در شکل زیر نمایش داده شده است. 

 

 

 

 

مایکروسافت از دو کلاس تهیه کننده عضویت در .NET Framework استفاده می‏کند:

·    ActiveDirectoryMembershipProvider: رابط برنامه کاربردی عضویت را در «شاخه فعال» و «شاخه فعال برنامه فرمان» سرور اجرا می‏کند.

·    SqlMembershipProvider: رابط برنامه کاربردی عضویت را در SQL Server اجرا می‏کند.

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



[1] Membership framework

[2] Membership

[3] Provider Model

محدودیت دسترسی به صفحات وب، شاخه‏ها و عملکرد صفحات

ASP.NET از دو روش تصمیم‏گیری برای اینکه یک کاربر خاص صلاحیت دسترسی به یک فایل و یا شاخه مشخص را دارد یا نه، استفاده می‏کند:

مجوزدهی فایلی:

زمانی که صفحات ASP.NET و وب سرویس‏ها، همانند فایل‏ها که روی سیستم فایل وب سرور قرار دارند، اجرا می‏شوند، دسترسی به این فایل‏ها می‏تواند از طریق لیست کنترل دسترسی[1] مشخص شود. مجوز فایل بیشتر در احراز هویت ویندوز استفاده می‏شود، زیرا ACLs در حساب‏های ویندوز اجازه دارد که به کار برده شود. وقتی احراز هویت فرم‏ها را استفاده می‏کنید، تمام سیستم عامل‏ها و فایل سیستم‏ها، صرف نظر از اینکه کاربر در حال دیدن سایت می‏باشد، درخواست سطح را مشابه با حساب ویندوز اجرا می‏کنند.

مجوزدهی URL:

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

مجوزدهی فایلی و مجوز دهی URL مجوز نقش‏ها برای دسترسی به صفحات مشخصASP.NET  و یا تمام صفحاتASP.NET  در یک شاخه مشخص را تعیین می‏کنند. با استفاده از این شیوه، ما می‏توانیم برایASP.NET  مشخص کنیم که درخواست‏ها برای صفحات خاصی را برای کاربری خاص مانع شود و یا اجازه دسترسی به مجموعه‏ای از کاربران بدهد و مانع دسترسی اشخاص دیگر شود. نظرتان در مورد این قضیه چیست که تمام کاربران بتوانند به صفحه دسترسی داشته باشند اما عملکرد صفحه به کاربر بستگی داشته باشد؟ برای مثال، بسیاری از سایت‏ها که حساب‏های کاربری دارند، صفحاتی دارند که محتویات و یا داده متفاوتی به کاربر شناسایی شده در مقابل کاربر ناشناس نشان می‏دهند. یک کاربر ناشناس باید یک پیوند برای ورود به سایت ببیند، در عوض، یک کاربر شناسایی شده باید یک پیام مانند "خوش آمدید کاربر" همراه با یک پیوند برای خروج مشاهده نماید. مثال دیگر، وقتی شما در حال مشاهده یک جنس در یک سایت حراجی هستید بسته به اینکه حراج گزارنده باشید و یا پیشنهاد دهنده قیمت، اطلاعات متفاوتی را مشاهده می‏کنید. 

برای نشان دادن محتویات متفاوت به کاربر ناشناس و کاربر شناسایی شده، به راحتی یک کنترل LoginVeiw به داخل صفحه بکشید و متن مناسب را در داخل AnonymousTemplate و LoggedInTemplate بنویسید. همچنین، شما می توانید با برنامه‏نویسی تصمیم بگیرید چه درخواستی شناسایی شده؟، کاربر کیست؟ و به او چه نقشی نسبت داده شده است؟ شما می‏توانید این اطلاعات را جهت نمایش دادن و یا ایجاد یک ستون مخفی در Grid و یا Panel در صفحه استفاده کنید.



[1] Access Control Lists (ACLs)