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