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

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

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

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

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

در بخش اول به امکانات  ASP کلاسیک ، ASP.NET 1.x و ASP.NET 2.0 در خصوص تائید و اعطاء مجوزهای لازم به کاربران به منظور استفاده از تمام و یا بخش هائی خاص از یک وب سایت اشاره گردید . در این بخش به بررسی  سرویس جدید membership در ASP.NET 2.0 و نحوه استفاده از آن در برنامه های وب خواهیم پرداخت . قبل از هر چیز اجازه دهید مجددا" این نکته را یادآور شویم که فرآیند Authentication در ASP.NET 2.0 از طریق سرویس membership  و فرآیند Authorization از طریق سرویس Roles انجام می شود.

تائید کاربران در ASP.NET 2.0
ASP.NET 2.0 ، سرویس membership را به منظور تائید کاربران جهت دستیابی به تمام صفحات و یا صفحاتی خاص از یک وب سایت ارائه نموده است . سرویس فوق ، علاوه بر ارائه یک API جدید برای مدیریت کاربران ، کنترل های سرویس دهنده جدیدی را به منظور پیاده سازی فرآیند تائید در اختیار پیاده کنندگان قرار می دهد.

چگونه می توان از سرویس membership استفاده نمود ؟
قبل از این که بتوان از کنترل های سرویس دهنده امنیتی استفاده نمود ، می بایست در ابتدا پیکربندی برنامه را بگونه ای انجام داد که امکان استفاده از سرویس  membership فراهم گردد .
به صورت پیش فرض ، ASP.NET 2.0 از AspNetSqlProvider برای ذخیره جزئیات اطلاعات مربوط به کاربران ریجستر شده استفاده می نماید .
یکی از دستاوردهای مهم   ASP.NET 2.0  ، ارائه یک data provider model است که مسئولیت جزئیات عملیات مدیریتی مورد نیاز برای ارتباط با چندین نوع منبع داده را برعهده می گیرند .
شکل زیر ، سرویس جدید membership در ASP.NET 2.0 را نشان می دهد .


منبع : سایت مایکروسافت

همانگونه که در شکل فوق مشاهده می نمائید ، Membership provider  ( همانند سایر ASP.NET 2.0 Provider models  ) قادر به دستیابی مجموعه ای گسترده از منابع داده است . در شکل فوق ، صرفا" منبع داده SQL Server ( گزینه پیش فرض ) نشان داده شده است . پیاده کنندگان می توانند در صورت تمایل اقدام به پیاده سازی  membership provider اختصاصی خود نموده تا به کمک آن با سایر منابع داده ارتباط برقرار نمایند . در شکل فوق ، همچنین مجموعه ای از کنترل های سرویس دهنده امنیتی که امکان دستیابی به Provider model برای پیاده سازی فرآیند تائید کاربران را فراهم می نمایند ، مشاهده می گردد .

افزودن عنصر <authentication> در فایل web.config
برای استفاده از تائید کاربران مبتنی بر فرم در یک برنامه وب جهت بکارگیری سرویس جدید membership ، اولین مرحله فعال کردن ویژگی فوق از طریق فایل web.config است . در صورت عدم وجود فایل web.config ، در ابتدا آن را ایجاد و بخش زیر را به آن اضافه می نمائیم :

<?xml version=?1.0? encoding="utf-8" ?>
   <configuration>
     <system.web>
        <authentication mode="Forms" />
     </system.web>
    </configuration>

با اضافه کردن عنصر <authentication> به فایل web.config ، امکان استفاده از تمامی پتانسیل های سرویس membership ارائه شده توسط ASP.NET 2.0 فراهم می گردد . بدین منظور می بایست مقدار خصلت mode ، معادل Forms در نظر گرفته شود ( خصلت فوق می تواند مقادیر دیگری نظیر  windows ,passport و None را داشته باشد ) .

افزودن عنصر <forms> به فایل web.config
استفاده از تائید مبتنی بر فرم ، کاربران را ملزم به درج نام و رمز عبور خود در یک فرم خاص می نماید . زمانی که یک کاربر قصد دستیابی به یک وب سایت را داشته باشد ، در ابتدا وی به صورت یک کاربر ناشناس ( anonymous ) وارد سایت می گردد . در صورتی که تشخیص داده شود که  کاربر ناشناس است ، ASP.NET  وی را به یک صفحه خاص login هدایت می نماید . پس از درج نام و رمز عبور و تائید هویت کاربر ، برای وی یک HTTP cookie ایجاد که از آن در درخواست های آتی استفاده می گردد . کد زیر نحوه تعریف یک فرم در فایل web.config را نشان می دهد .

<?xml version=?1.0? encoding="utf-8" ?>
    <configuration>
       <system.web>
          <authentication mode="Forms">
               <forms name=".ASPXAUTH"
                   loginUrl="login.aspx"
                   protection="All"
                   timeout="30"
                   path="/"
                   requireSSL="false"
                   slidingExpiration="true"
                   cookieless="useDeviceProfile" />

           </authentication>
     </system.web>
   </configuration>

 توضیحات :  

  •  عنصر <forms>  می بایست درون عنصر <authentication> تعریف گردد.

  • خصلت name ، نام کوکی ارسالی برای کاربران تائید شده را مشخص می نماید . نام کوکی به صورت پیش فرض ، ASPXAUTH . در نظر گرفته می شود .

  • loginUrl ، صفحه login را مشخص می نماید . ( در صورتی که کوکی با نام ASPZAUTH . و یا هر نام دیگری پیدا نشود ) . به صورت پیش فرض مقدار این خصلت login.aspx در نظر گرفته می شود .

  •  Protection ، میزان حفاظت اعمال شده در خصوص کوکی ذخیره شده بر روی ماشین کاربر  را مشخص می نماید . خصلت فوق می تواند یکی از مقادیر   All ,None , Encryption و Validation را دارا باشد که معمولا" از گزینه All استفاده می گردد .

  • timeout ،  مدت زمان حیات یک کوکی را مشخص می نماید ( بر حسب دقیقه ) . مقدار پیش فرض سی دقیقه است .

  • Path ، مسیر ذخیره کوکی را مشخص می نماید .

  • requireSSL ، مشخص می نماید که آیا اطلاعات حساس کاربر شامل نام و رمز عبور می بایست به صورت رمز شده و از طریق پروتکل SSL ارسال گردد .

  • slidingExpiration ، مدت زمان timeout کوکی را در یک sliding scale مشخص می نماید. با توجه به این که مقدار گزینه فوق به صورت پیش فرض True در نظر گرفته می شود، کوکی ایجاد شده بر روی ماشین کاربر سی  دقیقه ( مقدار مشخص شده توسط خصلت timeout ) پس از آخرین درخواست اعتبار خواهد داشت . در صورتی که مقدار خصلت فوق False در نظر گرفته شود ، اعتبار کوکی پس از گذشت سی دقیقه از اولین درخواست به اتمام خواهد رسید .

  • cookieless ، نحوه مدیریت کوکی توسط ASP.NET را مشخص می نماید . خصلت فوق می تواند یکی از مقادیر  useDeviceProfile , UseCookies ,auto ،  useUrl را دارا باشد . مقدار پیش فرض ، useDeviceProfile در نظر گرفته می شود و نحوه مدیریت کوکی بر اساس user agent دستگاه سرویس گیرنده انجام خواهد شد . 

 محل ذخیره اطلاعات کاربران در سرویس membership
SqlMemberShipProvider ، یکی از دو Membership Provider است که به همراه ASP.NET 2.0 ارائه شده است و از یک بانک اطلاعاتی SQL Server به منظور ذخیره اطلاعات کاربران استفاده می نماید . به منظور استفاده از Provider فوق ، می بایست یک DataBase schema ایجاد تا در ادامه provider  بتواند از آن استفاده نماید . به منظور انجام این کار می توان از دو روش زیر استفاده نمود :

  • استفاده از ابزار مدیریت ASP.NET website : با استفاده از ابزار فوق یک database schema در یک فایل SQL server 2005 ( فایل ASPNETDB.mdf ) و در فولدر App_Data ایجاد می گردد .

  • استفاده از ابزار خط دستوری ASP.NET SQL Server Registration tool ( فایل aspnet_regsql.exe )

برای استفاده از ابزار مدیریت ASP.NET website  ، پس از اجرای ویژوال استودیو دات نت 2005 ، از طریق منوی Website گزینه ASP.NET configuration را انتخاب می نمائیم . در ادامه و از طریق Security Tab ، نوع authentication را به "From internet" تغییر می دهیم . مراحل فوق را می توان از طریق لینک موجود در Authentication box و یا توسط Security Setup Wizard و دنبال نمودن مراحل مربوطه ، انجام داد . 


 ابزار مدیریت ASP.NET website 



با انجام مراحل فوق ، به صورت اتوماتیک یک بانک اطلاعاتی با نام ASPNETDB.mdf در فولدر App_Date ایجاد که دارای ساختار از قبل تعریف شده ای است . 


ایجاد بانک اطلاعاتی ASPNETDB.mdf

در مواردی که از ابزار مدیریت وب سایت برای مشخص کردن نوع authentication  ، به "From internet" استفاده می گردد، خط زیر به فایل web.config اضافه می گردد  :

<?xml version=?1.0? encoding="utf-8" ?>
   ...
        <authentication mode="Forms" />
   ...

در صورتی که لازم است اطلاعات کاربران را در مکانی دیگر ذخیره نمود ( در یک بانک SQL Server 2000 و یا یک بانک SQL Server 2005 که در فولدر App_data موجود نمی باشد ) ، می بایست از ابزار aspnet_regsql.exe استفاده نمود .
در صورتی که ایجاد Schema از طریق ASP.NET SQL Server Registration tools انجام شود ، می بایست  عبارت اشاره شده به صورت دستی در فایل web.config اضافه گردد  . در صورتی که Schema در یک بانک اطلاعاتی دیگر غیر از ASPNETDB.mdf و فولدر App_Data باشد ، لازم است که پیکربندی membership را در فایل web.config سفارشی و connection string مربوطه را مشخص نمود .
SqlMemberShipProvider اطلاعات مربوط به کاربران را در دو جدول زیر ذخیره می نماید :

  • aspnet_users ، برای هر user account دارای یک سطر است که اطلاعات پایه را نگهداری می نماید . ستون UserID به صورت منحصربفرد هر کاربر را در سیستم مشخص و به صورت یک  uniqueidentifier ذخیره می نماید ( یک GUID ) .

  • aspnet_membership  ، دارای یک ستون UserId است که هر رکورد را به یک رکورد خاص در aspnet_membership مرتبط می نماید. جدول فوق ، اطلاعات مرتبط با هر account نظیر email,password و سایر موارد را در خود ذخیره می نماید .


ساختار بانک اطلاعاتی ASPNETDB.mdf

سفارشی نمودن SqlMembershipProvider
در صورت استفاده از SqlMembershipProvider با تنظمیات پیش فرض (اطلاعات مربوط به کاربران در فایل ASPNETDB.mdf  سرویس دهنده SQL 2005 و درفولدر App_Data ذخیره می گردد ) ، ضرورتی به اعمال تغییرات در فایل  web.config نمی باشد. در غیر اینصورت ، می بایست از  تائیدیه مبتنی بر فرم استفاده شود و قوانین لازم جهت مجوزها نیز مشخص گردد .
در صورتی که قصد استفاده از یک بانک اطلاعاتی دیگر را داشته باشیم و یا بخواهیم برخی تنظمیات memebership را تغییر دهیم ( حداقل طول رمز عبور ، نحوه ذخیره رمز عبور به صورت plain text ، hashed و یا رمزشده  و ... ) ، می بایست تنظمیات سفارشی را در فایل web.config ثبت نمود .
نمونه کد  زیر نحوه سفارشی نمودن تنظیمات MemeberShipProvider را نشان می دهد .

<configuration>
  <connectionStrings>
     <add name="MyDB" connectionString="..." />
   </connectionStrings>
  <system.web>  
      <membership defaultProvider="CustomizedProvider">
         <providers>
             <add name="CustomizedProvider"
                     type="System.Web.Security.SqlMembershipProvider"
                     connectionStringName="MyDB"
                     minRequiredPasswordLength="5"
                     minRequiredNonalphanumericCharacters="0" />
      </providers>

   </membership>
  </system.web>
</configuration>

در <membership> ، یک provider جدید با نام CustomizedProvider تعریف تا membership provider پیش فرض را ایجاد می نماید . provider سفارشی فوق ، همچنان از SqlMemberShipProvider استفاده می نماید و صرفا" برخی مقادیر مربوطه سفارشی شده است .
پس از پیکربندی ASP.NET website ، جهت استفاده از سیستم Membership می توان مدیریت کاربران سایت را از طریق ابزار مدیریت وب سایت ASP.NET انجام داد . پس از فعال شدن برنامه فوق با استفاده از Security tab و کلیک بر روی لینک Create User می توان یک کاربر جدید را ایجاد و یا از طریق لینک manage users اقدام به ویرایش و یا حذف رکوردهای موجود کاربران نمود . 
در بخش سوم با نحوه استفاده از برخی کنترل های امنیتی جهت استفاده از سرویس membership آشنا خواهیم شد.

نظرات 1 + ارسال نظر
امیر یکشنبه 16 خرداد‌ماه سال 1389 ساعت 21:25

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

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