Authentication و Authorization (احراز هویت و مجوز) سفارشی در MVC

جمعه 9 مرداد 1394

ASP.NET MVC مقدمات برای Authentication و Authorization (احراز هویت و مجوز) را فراهم کرده است و می توان با استفاده صفت [Authorize] کلیه کاربران غیر مجاز را به صفحه ورود هدایت کرد. اما این در برنامه های سطح بالا نمی تواند کافی باشد بنابر این نیاز به سفارشی کردن Authentication و Authorization (احراز هویت و مجوز) داریم.

Authentication و Authorization (احراز هویت و مجوز) سفارشی در MVC

برای آشنایی با مقدمات و یادگیری Authentication و Authorization (احراز هویت و مجوز) می توانید از لینک هایی زیر استفاده نمایید.

آشنایی با صفت Authorize در MVC

در ابتدا گفتیم که می توان با استفاده صفت [Authorize] قبل از کنترلرها و اکشن متدها کلیه کاربران غیر مجاز را به صفحه ورود هدایت کرد یا با اندکی دستکاری می توان آنها را به صفحه خطای سفارشی هدایت کرد. اما این نمی تواند به اندازه کافی انعطاف پذیر باشد اگر ما بخواهیم برای شرکت هایی که مسائل امنیت یرای آنها در وهله اول باشد برنامه ای ارائه دهیم.

حال بحث Authentication و Authorization (احراز هویت و مجوز) سفارشی در MVC به میان می آید.

ارائه دهنده عضویت سفارشی (Custom Membership Provider) در ASP.NET MVC

MVC یک MemberShip Provider ساخته شده در NET. را برای پیاده سازی آن فراهم کرده است و استفاده از /ان بسیار ساده می باشد اما همانطور که در ابتدا گفته شد این نمی تواند برای افزایش امنیت به اندازه کافی انعطاف پذیر باشد. گزینه دیگر پیاده سازی یک Provider اختصاصی توسط خودمان است.

شما در هنگام پیاده سازی Membersip پیش فرض فراهم شده توسط NET. باید متوجه باشید که یک جدول با شمای مربوط به Authentication و Authorization (احراز هویت و مجوز) ساخته می شود. این کار به طور خودکار انجام می شود اما در صورت احراز هویت سفارشی نیاز به ساخت از ابتدا دارد یا می توان از شمای سیستم که معمولا ساخته شده در برنامه است استفاده شود.

راه اندازی پایگاه داده

اگر شما در حال حاضر بانک اطلاعاتی امنیتی دارید پس شما می تواند این مرحله را انجام ندهید و از مرحله بعد شروع نمایید.

command prompt ویژوال استادیو را باز کرده و دستور “aspnet_regsql” را وارد نمایید.


سپس Sql Wizard به صورت یک PopUp باز می شود. روی Next کلیک نمایید.

شما در این جا می توانید تصمیم بگیرید که روی قبلی کار کنید یا جاگزین نمایید :

نام سرور و بانک اطلاعاتی را انتخاب نمایید و ویزارد به صورت خودکار آن را با جداول بارگزاری شده با شمای امنیتی asp.net، بارگزاری خواهد کرد.

ساخت MEMBERsHIP سفارشی

ویژوال استادیو 2012 یا نسخه های بالاتر را باز کرده و یک Class Library Project بسازید.

حالا وقت اضافه کردن اسمبلی System.Web.ApplicationServices است. این فضای نام برای ما کلاس های مختلفی فراهم می نماید. کلاسهایی برای دسترسی به Forms authentication,(فرم های اعتبارسنجی)، Roles(نقش ها) و Profiles(پروفایل ها). برای اضافه کردن این اسمبلی روی پوشه Reference کلیک راست کرده و Add Reference را زده و اسمبلی را جست و جو کرده و آن را انتخاب نمایید.

کلاس Authentication سفارشی خود را در اینجا مانند زیر بسازید:

 

 

MembershipProvider یک متد با نام “()ValidateUser” ایجاد می نماید که باید آن را باطل کرد.

پیاده سازی Authentication سفارشی در MVC

یک پروژه از نوع MVC ایجاد می نماییم.(template پروژه می تواند اینترنت باشد).

ما می توانیم در قسمت نقشه فایل web.config تعدادی تگ عضویت ساخته یا جایگرین Class Library اعتبار سنجی سفارشی خود نماییم.

حالا مانند سابق قبل از کنترلر یا اکشن متد از صفت [Authorize] استفاده می نماییم.

این بسیار مهم است که enableSimpleMembership و autoFormsAuthentication را در web.config غیرفعال نماییم.

حالا برنامه را اجرا کرده و به اکشن متد با صفت Authorize می رویم.

مانند شکل به صفحه ورود هدایت خواهید شد.

سفارشی کردن Authorization یا Role Provider

در برنامه Class library قبلی یک کلاس CustomRoleProvider که از کلاس RoleProvider ارث بری می کند بسازید.

کلاس Role Provider یک متد برای مدیریت نقش ها با نام ()GetRoleForUser فراهم می نماید.

ما می توانیم یک تابع خاص با منطق خودمان جایگزین آن نماییم.

حالا در پروژه MVC که قبلا ساختیم فایل web.config را باز کرده و قسمت RoleManager را مانند زیر جایگزین می نماییم.

سپس از صفت Authorize اکشن متد با پروپرتی با نام Roles استفاده می نماییم.

حال اگر دوباره از برنامه اجرا بگیرید و به اکشن متد بروید می بینید که تنها اگر UserName نقش Admin داشته باشد به صفحه ورود هدایت داده می شوید.

ما همچنین می توانیم اعتبار سنجی هایی از نوع Google, Microsoft, Facebook و غیره بسازیم.
 این می تواند با کلاس WebDevelopmentCustomAuth از کلاس ExtendedMembershipProvider پیاده سازی شود. که خود این کلاس خاص یک کلاس پایه از کلاس MembershipProvider می باشد. همچنین برای این کار نیاز به اضافه کردن اسمبلی WebMatrix.WebData و دستکاری AccountController برای استفاده انواع شبکه های اجتماعی دیگر می باشد.

Authorization و Authentication سفارشی برای ما انعطاف لازم در پیاده سازی امنیت را فراهم می نماید.

برنامه نویسان

نویسنده 3355 مقاله در برنامه نویسان

کاربرانی که از نویسنده این مقاله تشکر کرده اند

در صورتی که در رابطه با این مقاله سوالی دارید، در تاپیک های انجمن مطرح کنید