برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

برترین مقالات کامپیوتر

سرویس های Membership و Roles در ASP.NET 2.0 (بخش اول)

تائید کاربران و امکان استفاده آنان از پتانسیل های موجود بر روی یک سایت و یا برنامه بر اساس مجوزهای تعریف شده ، از جمله عملیات مهم در بسیاری از وب سایت ها و یا برنامه های وب است . امروزه بر روی اینترنت می توان سایت های متعددی را مشاهده نمود که کاربران را ملزم به login نموده تا پس از بررسی هویت آنان ، امکان استفاده از امکانات موجود بر روی سایت ( تمام سایت و یا بخش هائی خاص ) بر اساس مجوزهای تعریف شده ، فراهم گردد . به عنوان نمونه ، در برخی از سایت ها امکان ارسال خبر ، پیام ، مشاهده مقالات و ...  صرفا" در اختیار کاربران تائید شده گذاشته می شود .
در سناریوی فوق ما با دو چالش اساسی مواجه هستیم :
  • تائید هویت کاربران ( Authentication )
  • استفاده از امکانات موجود بر روی سایت توسط کاربران با توجه به مجوزهای تعریف شده ( Authorization  )

اجازه دهید قبل از این که به نحوه مدیریت کاربران در ASP کلاسیک ، ASP.NET 1.x و ASP.NET 2.0 اشاره نمائیم ، تعریفی داشته باشیم از Authentication و Authorization  :

  • Authentication ، فرآیندی است که بر اساس آن هویت یک کاربر بررسی می گردد. پس از تائید کاربر ، این موضوع بررسی خواهد شد که کاربر تائید شده مجاز به انجام چه نوع عملیاتی است .

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

با استفاده از فرآیندهای فوق ، پیاده کنندگان می توانند یک سایت را با توجه به نوع کاربران سفارشی نمایند .

ملزومات یک سیستم مدیریت کاربران به منظور تامین فرآیندهای Authentication  و Authorization
ایجاد یک سیستم جهت مدیریت کاربران  مستلزم انجام مراحل مشابهی است :

  • ایجاد یک بانک اطلاعاتی که اطلاعات مربوط به کاربران در آن ذخیره گردد.
  • ایجاد یک صفحه login
  • ایجاد سیستمی به منظور کنترل این که کاربران قادر به دستیابی چه صفحاتی می باشند . 
  • ایجاد یک صفحه برای تعریف کاربر جدید 
  • ایجاد یک صفحه برای مدیریت سایت جهت مدیریت کاربران 
  • و ...

در ادامه به بررسی امکانات ارائه شده در ASP کلاسیک ، ASP.NET 1.x و ASP.NET 2.0  در خصوص مدیریت کاربران خواهیم پرداخت .

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

ASP.NET 1.x
به منظور کاهش عملیات مورد نیاز برای پیاده سازی سیستم مدیریت کاربران در ASP.NET 1.x ، امکانات متعددی ارائه گردید . تائید کاربران بر اساس فرم ، امکان تعریف قوانین و مجوزهای دستیابی در فایل web.config ، نمونه هائی در این زمینه می باشد .
ASP.NET ، مفهوم تائید بر اساس فرم را با استفاده از کلاس FormAuthentication معرفی تا امکان ورود و خروج از یک سایت با سهولت بیشتری فراهم گردد . بدین منظور از  یک Authentication ticket حفاظت شده به منظور بخاطر سپردن این که چه کاربرانی login نموده اند ، استفاده می گردید ( در زمان درخواست صفحات ) . برای ایجاد یک مکانیزم ایمن تبادل اطلاعات یک authentication ticket به عنوان یک کوکی بر روی کامپیوتر سرویس گیرنده ایجاد تا امکان بخاطر سپردن و تشخبص این که کاربر به برنامه و یا سایت login نموده است وجود داشته باشد (در درخواست های بعدی ) . کلاس FormAuthentication متدهای لازم به منظور کار با authentication ticket (  ایجاد :: logging و حذف :: logout ) را ارائه می نماید.
تائید کاربران مبتنی بر فرم به دنبال این هدف بود تا بتواند یک رویکرد استاندارد برای انجام دو عملیات متداول در ارتباط با مدیریت کاربران را ارائه نماید .
روش فوق علیرغم مزایای متعدد ، پیاده کنندگان را مجبور می نماید که همچنان حجم بالائی از کد را نوشته و مدیریت بسیاری از عملیات مرتبط با کاربران را خود انجام دهند( ایجاد صفحات login ,logoff ، تعریف یک کاربر جدید و ... ) . بدین ترتیب حجم کار پیاده کنندگان نه تنها کمتر نمی گردد ، بلکه در بسیاری از موارد نیز افزایش می یابد . رویکرد فوق باعث گردید که نتوان از یک روش جامع امنیتی استفاده نمود. مثلا" یک پیاده کننده ممکن است اطلاعات کاربران را به صورت متن معمولی و رمزنشده در یک بانک ذخیره نماید و دیگری به صورت hash  .
ایده تائید کاربران مبتنی بر فرم ارائه شده  در ASP.NET 1.x ،‌ یک ایده بزرگ و در عین حال جالب است ولی به نظر  پیاده سازی آن با در نظر گرفتن تمامی ملزومات مورد نیاز یک سیستم مدرن مدیریت کاربران انجام نشده است .

ASP.NET 2.0
فرآیند Authentication در ASP.NET 2.0 از طریق سرویس جدید membership  و Authorization از طریق سرویس جدید Roles انجام می شود.
ASP.NET 2.0 کار آغاز شده در تائید کاربران مبتنی بر فرم را که در نسخه ASP.NET 1.x شروع شده بود ، تکمیل و امکانات مناسبی برای انجام عملیات متفاوتی نظیر تائید کاربران ، ایجاد یک کاربر جدید ، حذف یک کاربر و ویرایش اطلاعات کاربران از طریق برنامه نویسی و به کمک  کنترل های وب را ارائه نمود  . شیوه عملکرد عمومی تائید کاربران مبتنی بر فرم در ASP.NET 2.0 مشابه نسخه قبلی است و می بایست عملیات اولیه و پیکربندی لازم را از طریق فایل های پیکربندی انجام داد  ( ثبت تنظیمات لازم در فایل web.config )  . چیزی که در ASP.NET 2.0 به آن اضافه گردید در واقع membership API  و کنترل های وب ( سرویس دهنده ) امنیتی است .   API فوق به برنامه نویسان اجازه می دهد از طریق کد به پتانسیل های سرویس  membership  دستیابی داشته باشند .
Membership API با استفاده از Provider model پیاده سازی شده است . این بدان معنی است که علیرغم این که اینترفیس فوق به خوبی تعریف شده است ولی می توان در صورت تمایل ، پیاده سازی آن را متناسب با شرایط موجود سفارشی نمود . فریمورک دات نت ، بدین منظور کلاس Membership را که شامل متدهائی نظیر CreateUser ,GetAllUser,Validateuser و ... است ، ارائه نموده است .سیستم membership قابلیت ها و توانمندهای برنامه نویسی خود را از طریق کلاس Membership ارائه می نماید . از کلاس فوق می توان مستقیما" در صفحات وب استفاده نمود . مثلا" می توان یک صفحه را ایجاد که تمام کاربران در سیستم را لیست نماید ( استفاده از متد Membership.GetAllUsers که به یک GridView نسبت داده شده باشد) .
ASP.NET به همراه دو Membership provider از قبل تعبیه شده ارائه شده است .یکی برای ذخیره اطلاعات کاربران در یک بانک اطلاعاتی SQL و دیگری که از اکتیو دایرکتوری استفاده می نماید .
علاوه بر موارد فوق ، ASP.NET 2.0 به منظور مدیریت کاربران هفت کنترل متفاوت را ارائه که با استفاده از آنان می توان برنامه های وبی را ایجاد نمود که از پتانسیل سرویس های membership و roles استفاده نمایند . در واقع ، کنترل های فوق یک رابط کاربر مناسب برای انجام عملیات مرتبط با کاربران را ارائه می نمایند .

در صورتی که از یک محل ذخیره سازی سفارشی استفاده شده باشد ( در صورت استفاده از یک membership provider سفارشی )  ، همچنان امکان استفاده از کنترل های فوق وجود خواهد داشت . این کنترل ها عبارتند از :

  • Login : یک اینترفیس متداول برای login شامل نام و رمز عبور را ارائه می نماید . به صورت پیش فرض ، زمانی که کاربر بر روی دکمه login کلیک می نماید یک postback ایجاد و کنترل تلاش می نماید تا بر اساس اطلاعات درج شده توسط کاربر وی را تائید نماید . بدین منظور متد ( Verify (Username,password  مربوط به کلاس membership صدا زده می شود . در صورتی که اطلاعات درج شده معتبر باشند ، یک authentication thicket  برای کاربر ایجاد می گردد . در غیراینصورت یک پیام خطاء بر روی اینترفیس نمایش داده می شود .

  • LoginView : در برخی موارد لازم است که در یک صفحه محتویات متفاوتی را با توجه به ماهیت کاربر ( ناشناس و یا تائید شده ) ، نمایش داد. مثلا" زمانی که یک کاربر ناشناس صفحه اصلی یک وب سایت را مشاهده می نماید یک Login web control نمایش داده شود و زمانی که یک کاربر تائید شده همان صفحه را مشاهده می نماید ، یک پیام خاص مرتبط با نام کاربر به همراه یک لینک جهت logoff نمایش داده شود . با استفاده از کنترل loginview می توان از دو تمپلیت AnonymouseTemplate و LoggedInTemplate استفاده نمود . کنترل های وب و تگ های Html را می توان در AnonymouseTemplate  برای کاربران ناشناس و کنترل ها و تگ های html برای کاربران تائید شده را در LoggedInTemplate قرار داد . Loginview همچنین می تواند خروجی های متفاوتی را با توجه به نقش کاربر تائید شده نمایش دهد .

  • PasswordRecovery : کنترل فوق ، این امکان را در اختیار کاربران قرار می دهد تا بتوانند رمزعبور موجود و یا جدیدی را از طریق email دریافت نمایند . در صورتی که memebership provider رمز عبور را به صورت hashed ذخیره کرده باشد ، فرآیند بازیافت رمز عبور عملا" ایجاد یک رمز عبور جدید و تصادفی است که برای کاربر ارسال می گردد . برای رمزهای عبوری که به صورت plain text  و یا رمز شده می باشند ، رمز عبور واقعی موجود برای کاربر از طریق email ارسال می گردد .

  •  Loginstatus : کنترل فوق یک لینک به صفحه login را برای کاربران ناشناس و تائید نشده ، نمایش خواهد داد . در صورتی که یک کاربر تائید شده صفحه را ملاقات نماید ، یک لینک logoff برای وی نمایش داده می شود .

  •  LoginName : کنترل فوق ، نام کاربر تائید شده ای  را که به سیستم وارد شده است ، نمایش می دهد . با استفاده از User.Identity.Name در برنامه ، می توان به کاربرانی که به سایت و یا برنامه login نموده اند ، دستیابی داشت .

  •  CreateUserWizard : علاوه بر یک صفحه جهت logging ، هر وب سایت مبتنی بر account نیاز به صفحه ای دارد تا مشخص نماید کدامیک از کاربران قادر به ایجاد یک کاربر جدید می باشند . کنترل CreateUserWizard ، یک رابط کاربر گرافیکی مناسب برای ایجاد یک کاربر جدید را  ایجاد می نماید.همانند کنترل login ، پس از تکمیل داده در فیلدهای مورد نیاز و کلیک بر روی دکمه Create user ، متد CreateUser کلاس Membership فراخوانده می شود . CreateUserWizard همچنین می تواند در صورت نیاز با استفاده از تمپلیت ها سفارشی گردد. 

  • Changepassword : از کنترل فوق به متظور تغییر رمز عبور استفاده می گردد .

تمامی کنترل های امنتیی اشاره شده را می توان بدون نیاز به نوشتن کد استفاده نمود . مثلا" برای‌ ایجاد یک صفحه login کافی است یک صفحه با نام Login.aspx را ایجاد و یک کنترل Login را بر روی آن قرار داد . بدین ترتیب شما دارای یک صفحه login می باشید بدون این که لازم باشد از یک خط کد استفاده شود . در صورت تمایل می توان شکل ظاهری و یا منطق کنترل را تغییر داد .
در بخش دوم به بررسی امکانات سرویس جدید membership در ASP.NET 2.0 و نحوه استفاده از آن در برنامه های وب خواهیم پرداخت .

نظرات 1 + ارسال نظر
شمه چهارشنبه 7 مهر‌ماه سال 1389 ساعت 09:37

سلام
از نوشته هاتون ممنونم

برای نمایش آواتار خود در این وبلاگ در سایت Gravatar.com ثبت نام کنید. (راهنما)
ایمیل شما بعد از ثبت نمایش داده نخواهد شد