PDA

نسخه کامل مشاهده نسخه کامل : امنيت برنامه های وب



hatef_4541
08-03-2006, 14:12
امنيت برنامه های وب ( بخش اول )
هر برنامه کامپيوتری که برای اجراء در محيط شبکه، طراحی و پياده سازی می گردد ، می بايست توجه خاصی به مقوله امنيت داشته باشد .برنامه های وب از زيرساخت شبکه ( اينترانت ، اينترانت ) برای ارائه خدمات خود به کاربران استفاده نموده و لازم است نحوه دستيابی کاربران به اين نوع از برنامه ها ، کنترل و با توجه به سياست های موجود ، امکان دستيابی فراهم گردد .در ابتدا می بايست کاربران شناسائی و پس از تائيد هويت آنان ، امکان دستيابی به برنامه با توجه به مجوزهای تعريف شده ، فراهم گردد. ASP.NET ( پلات فرم مايکروسافت برای طراحی و پياده سازی برنامه های وب ) ، از سه روش عمده به منظور شناسائی کاربران و اعطای مجوزهای لازم در جهت دستيابی و استفاده از يک برنامه وب ، استفاده می نمايد :

Windows Authentication

Forms Authentication

Passport Authentication

در مجموعه مقالاتی که ارائه خواهد شد به بررسی هر يک از روش های فوق در جهت پياده سازی امنيت در برنامه های وب خواهيم پرداخت . در بخش اول اين مقاله ، به بررسی نحوه برخورد ASP.NET با کاربران ناشناس ( Anonymous ) ، روش های متفاوت شناسائی کاربران و پارامترهای لازم در خصوص انتخاب يک استراتژی به منظور شناسائی کاربران با توجه به نوع برنامه ها ، خواهيم پرداخت .

شناسائی و تائيد کاربران
Authentication ، فرآيندی است که بر اساس آن کاربران شناسائی می گردند . Authorization ، فرآيند اعطای دستيابی به کاربران با توجه به هويت آنان می باشد . با تلفيق Authentication و Authorization، امکان ايمن سازی برنامه های وب در مقابل افراد مزاحم و غير مجاز ، فراهم می گردد .

دستيابی از طريق کاربران ناشناس ( Anonymous )
اغلب سايت های وب از روش دستيابی "Anonymous" ، استفاده می نمايند . در چنين مواردی ، اطلاعات موجود بر روی سايت جنبه عمومی داشته و امکان دستيابی تمامی کاربران به اطلاعات وجود خواهد داشت . اين نوع سايت ها ، ضرورتی به بررسی مجاز بودن کاربران برای استفاده از منابع موجود ، نخواهند داشت . برنامه های وب ASP.NET ، امکان دستيابی Anonymous را به منابع موجود بر روی سرويس دهنده توسط Impersonation ارائه می نمايند . Impersonation ، فرآيند نسبت دهی يک Account به يک کاربر ناشناس است . Account دستيابی Anonymous بصورت پيش فرض ، IUSER_computername ، می باشد. با استفاده از Account فوق ، امکان کنترل کاربران ناشناس که به منابع موجود بر سرويس دهنده دستيابی دارند ، وجود خواهد داشت . به منظور مشاهده و تغيير مجوزهای دستيابی در نظر گرفته شده برای Account فوق از برنامه Computer Management استفاده می گردد :

ورود به شبکه ( Logon ) به عنوان مديريت شبکه

اجرای Computer Management ( از طريق : Start | Programs | Administrator Tools )

انتخاب فولدر Users به منظور نمايش ليست کاربران

مشاهده گروههائی که Account فوق به عنوان عضوی از آنان می باشد( کليک بر روی Member of ) . کاربران Anonymous ، بصورت پيش فرض ، عضوی از گروه Guests بوده که دارای مجوزهای اندکی می باشد. ASP.NET از ASP.NET Account ( با توجه به تنظيمات پيش فرض) ، به منظور اجرای برنامه وب استفاده می نمايد . بدين ترتيب ، در صورتيکه برنامه ای سعی در انجام عملياتی نمايد که در ليست مجوزهای ASP.NET Account وجود نداشته باشد ، يک مورد خاص امنيتی بوجود آمده و امکان دستيابی آن تائيد نخواهد شد.

به منظور اعمال محدوديت در دستيابی کاربران ناشناس می توان از تنظيمات مربوط به مجوزهای فايل ويندوز استفاده نمود . برای ايمن سازی ، سرويس دهنده می بايست دارای سيستم فايل NTFS باشد . سيستم های فايل FAT و يا FAT32 ، ايمن سازی در سطح فايل را ارائه نمی نمايند .

دستيابی از طريق کاربران تائيد شده
دستيابی Anonymous ، گزينه ای مناسب برای دستيابی به اطلاعات عمومی و عام است . در صورتيکه برنامه های وب شامل اطلاعاتی خاص و خصوصی باشند ، می بايست در ابتدا کاربران شناسائی و در ادامه با توجه به مجوزهای تعريف شده ، امکان دستيابی فراهم گردد. در برنامه های وب ASP.NET از سه روش عمده به منظور Authentication و Authorization کاربران استفاده می گردد :

Windows integrated authentication : در روش فوق ، شناسائی و تائيد کاربران بر اساس ليست کاربران تعريف شده بر روی سرويس دهنده انجام خواهد شد. در ادامه با توجه به مجوزها و امتيازات نسبت داده شده به هر Account ، امکان دستيابی و يا عدم دستيابی به منابع موجود بر روی سرويس دهنده ، فراهم می گردد.

Forms authentication : در روش فوق ، کاربران به يک فرم وب Logon ، هدايت می گردند . در ادامه ، اطلاعات مربوط به نام و رمز عبور آنان اخذ و فرآيند شناسائی و تائيد بر اساس يک لسيت کاربران و يا از طريق يک بانک اطلاعاتی که برنامه حمايت می نمايد ، انجام خواهد شد.

Passport authentication : در روش فوق ، کاربران جديد به يک سايت که توسط مايکروسافت ميزبان شده است ، هدايت می گردند .پس از ريجستر شدن کاربران ، امکان دستيابی آنان به چندين سايت ، فراهم خواهد شد( تمرکز در شناسائی کاربران و استفاده از سايت های متعدد با توجه به تائيد بعمل آمده ) .

هر يک از رويکردهای فوق ، به همراه روش دستيابی Anonymous ، دارای مزايای مختص به خود بوده و برای نوع خاصی از برنامه های وب ، مناسب می باشند :

نوع برنامه : برنامه وب عمومی اينترنت
روش تائيد کاربران : Anonymous
توضيحات : روش عمومی دستيابی برای اغلب سايت های وب ، می باشد. در اين روش ، ضرورتی به Logon وجود نداشته و با استفاده از مجوزهای سيستم فايل NTFS ، می توان ايمن سازی منابعی را که قصد اعمال محدوديت در رابطه با دستيابی به آنان وجود دارد را انجام داد .

نوع برنامه : برنامه وب اينترانت
روش تائيد کاربران : Windows integrated
توضيحات : در روش فوق ، سيستم معتبر سازی ويندوز ، کاربران شبکه را از طريق کنترل کننده Domain ، تائيد می نمايد. امکان دستيابی به منابع برنامه های وب بر اساس مجوزهای تعريف شده بر روی سرويس دهنده ، برای هر يک از کاربران فراهم می گردد .

نوع برنامه : برنامه های وب تجاری
روش تائيد کاربران : Forms
توضيحات : برنامه هائی که نيازمند دريافت اطلاعات مالی می باشند ، می بايست از روش فوق به منظور اخذ و ذخيره سازی اطلاعات ، استفاده نمايند .

نوع برنامه : برنامه های متعدد تجاری
روش تائيد کاربران : Passport
توضيحات : در روش فوق ، کاربران يک مرتبه Sign in نموده ( از طريق يک مرکز تائيد کاربران ) و امکان دستيابی و استفاده آنان از تمامی برنامه هائی که از Passport SDK استفاده می نمايند ، وجود خواهد داشت . اطلاعات کاربران در يک Passport profile نگهداری خواهدشد ( در مقابل استفاده از يک بانک اطلاعاتی محلی ) .

استفاده از Authentication در فايل های HTM و يا HTML
سه روش تائيد کاربران که توسط ASP.NET ارائه شده است ، صرفا" در رابطه با فايل هائی که به عنوان بخشی از برنامه وب می باشند ، بکار گرفته می شود .فرم های وب ( فايل هائی با انشعاب aspx . ) ، ماژول ها ( فايل هائی با انشعاب asax . ) ، نمونه هائی در اين زمينه می باشند. فرآيند فوق ، صفحات HTML ( فايل هائی با انشعاب HTM و يا HTML ) را شامل نمی گردد و مسئوليت آن بصورت پيش فرض به IIS ( در مقابل ASP.NET ) واگذار شده است. در صورتيکه فصد تائيد کاربرانی ( استفاده از يکی از روش های Windows,Forms و Passport ) را داشته باشيم که به صفحات HTML از طريق برنامه وب دستيابی دارند ، می بايست اين نوع فايل ها به ASP.NET executable ، مپ گردند .به منظور مپ نمودن فايل های html به ASP.NET executable ، پس از اجرای IIS مراحل زير را دنبال می نمائيم :

انتخاب فولدر شامل برنامه وب و Properties از طريق Action Menu . در ادامه برنامه IIS ، جعبه محاوره ای Properties را نمايش خواهد داد .

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

بر روی Directory Tab کليک نموده و در ادامه گزينه Configuration را انتخاب می نمائيم . IIS در ادامه جعبه محاوره ای Application Configuration را نمايش خواهد داد :

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

بر روی دکمه Add کليک نموده و در ادامه IIS جعبه محاوره ای Add/Edit Application Extension Mapping را نمايش خواهد داد .


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

بر دکمه Browse کليک نموده و فايل aspnet_isapi.dll را انتخاب می نمائيم .فايل فوق در دايرکتوری Windows Microsoft .Net Framework قرار داشته و مسير آن مشابه زير است :

Path for aspnet_isapi.dll

C:\windows\Microsoft.NET\Framework\versionnumber\a spnet_isapi.dll


htm. را در فيلد File Extension تايپ می نمائيم .

مراحل فوق ، برای فايل های با انشعاب html ، تکرار می گردد.

در بخش دوم اين مقاله به بررسی Windows Authentication خواهيم پرداخت .

hatef_4541
08-03-2006, 14:13
در بخش اول اين مقاله ، به نحوه برخورد ASP.NET با کاربران ناشناس ( Anonymous ) ، روش های متفاوت شناسائی کاربران و پارامترهای لازم در خصوص انتخاب يک استراتژی به منظور شناسائی کاربران با توجه به نوع برنامه ها ، اشاره گرديد.در بخش دوم اين مقاله به بررسی Windows Authentication خواهيم پرداخت .
همانگونه که در بخش اول اين مقاله اشاره گرديد ، برنامه های وب ASP.NET از سه روش عمده به منظور تائيد کاربران استفاده می نمايند :

Windows Authentication

Forms Authentication

Passport Authentication

در Windows Authentication ، برنامه های وب مسئوليتی را در ارتباط با تائيد کاربران برعهده نگرفته و اين وظيفه تماما" به سيستم عامل ويندوز ، واگذار می گردد. فرآيند تائيد کاربران در روش فوق، بصورت زير است :

کاربر درخواستی مبنی بر دريافت يک صفحه وب ايمن را از برنامه وب ، می نمايد .

پس از دريافت درخواست توسط سرويس دهنده وب ، IIS عمليات بررسی صلاحيت کاربر را انجام خواهد داد . در اين راستا ، اطلاعات ارائه شده توسط کاربر در زمان logon ( نام و رمز عبور) ، با اطلاعات موجود بر روی سرويس دهنده وب و يا Domain ، مقايسه می گردد .

در صورتيکه پس از بررسی مدارک ارائه شده توسط کاربر ( نام و رمز عبور ) ، وی به عنوان کاربر غير مجاز تشخيص داده شود ، درخواست وی ناديده گرفته خواهد شد .

کامپيوتر سرويس گيرنده ، يک جعبه محاوره ای Logon را توليد و از کاربر درخواست درج اطلاعات مورد نياز ( نام و رمز عبور ) ، می گردد . پس از درج اطلاعات درخواستی توسط کاربر و ارسال آنان برای سرويس دهنده ، مجددا" IIS بررسی لازم در خصوص صحت آنان را انجام خواهد داد . در صورتيکه صحت اطلاعات ارسالی کاربر ( نام و رمز عبور ) تائيد گردد ، IIS درخواست اوليه کاربر را به سمت برنامه وب هدايت می نمايد .

در آخرين مرحله و پس از بررسی و تائيد صلاحيت کاربر ، صفحه وب درخواستی برای کاربر ارسال می گردد .

مهمترين مزيت روش Windows Authentication ، استفاده مشترک از يک مدل امنيتی به منظور دستيابی به منابع موجود در شبکه و برنامه های وب است . پس از تعريف و اعطای مجوزهای لازم به کاربر ، امکان دستيابی وی به منابع موجود در شبکه و برنامه های وب بر اساس يک سيستم امنيتی مشابه و يکسان ، فراهم می گردد .
در زمان ايجاد يک پروژه جديد برنامه وب توسط ويژوال استوديو دات نت ، از روش Windows Authentication بصورت پيش فرض به منظور تائيد کاربران استفاده می گردد .پس از ايجاد يک پروژه جديد برنامه وب در ويژوال استوديو دات نت ، فايل Web.Config بصورت اتوماتيک ايجاد می گردد . ( يک فايل XML که اطلاعات متفاوتی را در ارتباط با پيکربندی رنامه وب در خود ذخيره می نمايد ) . محتوی پيش فرض اين فايل بصورت زير است ( صرفا" بخشی که با موضوع اين مقاله ارتباط دارد ، منعکس می گردد ) :

Web.Config default setting

<authentication mode="Windows" />
<authorization>
<allow users="*" /> <!-- تمامی کاربران -->
</authorization>


در بخش مربوط به عنصر authentication ، سياست تائيد کاربران برنامه های وب مخشص می گردد . برای مشخص نمودن سياست فوق از خصلت mode مربوط به عنصر authentication ، استفاده شده که می تواند يکی از مقادير : Windows , Forms ,Passport و يا None را دارا باشد . در بخش authorization ، سياست های مربوط به کاربران مجاز برنامه وب مشخص می گردد . در اين رابطه می توان ، امکان دستيابی و يا عدم دستيابی به برنامه های وب را با مشخص نمودن کاربران و يا با توجه به وظايف آنان ، فراهم نمود. ( استفاده از کاراکتر " * " ، به معنی همه کاربران بوده و کاراکتر "؟" به منزله کاربران ناشناس و غيرمجاز است) . برای آشنائی با عملکرد روش Windows Authentication ، مراحل زير را دنبال می نمائيم :

بخش authorization در فايل Web.Config را بصورت زير تغيير می نمائيم :

Authorization element

<authorization>
<deny users="?" />
</authorization>


تگ های زير را که يک جدول HTML را تعريف می نمايند ، در فرم وب شروع برنامه وب ، قرار می دهيم :

HTML Table in Startup web form

<TABLE id="tblUser">
<tr>
<TD><STRONG>آيا کاربر تائيد شده است ؟</STRONG></TD>
<TD><Span runat="server" id="spnAuthenticated"></Span></TD>
</tr>
<tr>
<TD><STRONG>نام کاربر </STRONG></TD>
<TD><Span runat="server" id="spnUserName"></Span></TD>
</tr>
<tr>
<TD><STRONG>نوع تائيد کاربر</STRONG></TD>
<TD><Span runat="server" id="spnAuthenticationtype"></Span></TD>
</tr>
</TABLE>


به حالت Design view سوئيچ نموده و کد زير را در فايل Code Behind فرم وب شروع برنامه ، قرار می دهيم :

Web form's code-behind file

Private Sub Page_Load( ByVal sender As System.Object,ByVal e As System.EventArgs ) Handles Mybase.Load
spnAuthenticated.InnerText = User.Identity.IsAuthenticated
spnUserName .InnerText = User.Identity.Name
spnAuthenticationType.InnerText = User.Identity.AuthenticationType
End Sub


پس از اجرای پروژه بصورت محلی ، ASP.NET تائيد کاربر را بر اساس نام و رمز عبوری که برای ورود به ويندوز استفاده شده است ، انجام خواهد د اد .

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

پس از اجرای پروژه از راه دور ( مثلا" دستيابی از طريق اينترنت ) ، ASP.NET يک جعبه محاوره ای رادر مرورگر نمايش داده تا از طريق آن نام و رمز عبور کاربر دريافت گردد .


[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]


در صورتيکه نام و رمز عبور درج شده توسط کاربر با تعاريف انجام شده در Domain شبکه ، مطابقت نمايد ، ASP.NET کاربر را تائيد و مجوز لازم به منظور استفاده از برنامه وب صادر خواهد شد . در اين رابطه ASP.NET ، يک authorization certificate را به شکل يک کوکی صادر که در حين Session کاربر ، نگهداری و از آن استفاده می گردد. Session کاربر، پس از اتمام زمان Time out و يا بستن مرورگر ، خاتمه می يابد . برنامه وب اجرای خود را متناسب با مجوزهای تعريف شده در ارتباط با Account آغاز می نمايد .
روش Windows integrated authentication در يک شبکه مبتنی بر Domain بهتر کار خواهد کرد . شبکه هائی که از Workgroup استفاده می نمايند ( در مقابل استفاده از Domain ) دارای محدوديت های خاص خود به منظور استفاده از ويژگی های امنيتی ، می باشند. شبکه های مبتنی بر Domain ، از يک کنترل کننده Domain به منظور تائيد و معتبرسازی کاربران شبکه ، استفاده می نمايد .
با استفاده از امکانات ارائه شده در فايل Web.Config می توان يک لايه امنيتی مضاعف را ايجاد نمود . دراين راستا ، می توان تنظيمات لازم به منظور دستيابی و يا عدم دستيابی کاربران و يا گروه های خاصی از کاربران را نيز انجام داد .

اعمال محدوديت برای کاربران خاص ( دستيابی و يا عدم دستيابی )
در موارديکه از روش Windows integrated authentication استفاده می گردد ، ASP.NET ، ليست تائيد موجود در فايل Web.Config را به منظور آگاهی از صلاحيت کاربران شبکه برای استفاده ازبرنامه وب ، بررسی می نمايد. کاراکترهای "*" و "؟" دارای معانی خاصی در ليست تائيد می باشند : کاراکتر "* " ، نشاندهنده تمامی کاربران و کاراکتر "؟"، نشاندهنده کاربران غير مجاز( ناشناس) می باشد . مثلا" ليست تائيد زير در Web.Config ، امکان دسـتيابی تمامی کاربران ناشناس به برنامه وب را حذف و می بايست تمامی کاربران به منظور استفاده از برنامه وب ،تائيد گردند .

Authorization element

<authorization>
<deny users="?" />
</authorization>


به منظور اعمال محدوديت در دستيابی کاربرانی خاص ،می توان از عنصر <allow> استفاده و اسامی تمامی کاربران مجاز را با صراحت مشخص نمود (اسامی توسط ويرگول از يکديگر تفکيک می گردند) . پس از معرفی کاربران مجاز با استفاده از عنصر <allow> ، می بايست با بکارگيری عنصر <deny> ، امکان دستيابی به برنامه توسط کاربران غير مجاز، سلب می گردد .

Authorization element

<authorization>
<allow users="Ali Reaz , Reza Ali " />
<deny users="*" />
</authorization>


ليست مجاز فوق ، امکان دستيابی دو کاربر که اسامی آنان با صراحت مشخص شده است را به برنامه وب خواهد داد. ساير کاربران ، امکان دستيابی به برنامه وب را دارا نخواهند بود ( نقش عنصر deny در مثال فوق ) علاوه بر ليست مجاز فوق که اسامی دو کاربر را مشخص و آنان را برای استفاده از برنامه وب مجاز می نمايد ، دو کاربر فوق ، می بايست دارای Account لازم در Domain شبکه نيز باشند .

تائيد کاربران بر اساس نوع وظيفه
برای تائيد کاربران به منظور استفاده از يک برنامه می توان ، مجوزهای لازم را بر اساس وظيفه آنان در سازمان ، صادر و امکان دستيابی و يا عدم دستيابی را برای آنان فراهم نمود. در ويندوز NT و XP ، وظايف به اسامی مپ شده تا از اين طريق امکان شناسائی گروه های کاربران ، فراهم گردد. ويندوز، چندين گروه را بصورت اتوماتيک از قبل ايجاد می نمايد : Administrators ,Users و Guests . در اين رابطه می توان از عنصر <roles> در ليست استفاده کنندگان مجاز برنامه وب در فايل Web.Config استفاده و امکان دستيابی به يک برنامه را با توجه به وظايف کاربر ، فراهم نمود. مثلا" ليست زير، امکان دستيابی به برنامه وب را صرفا" برای کاربرانی که به عنوان Administrator به شبکه وارد می شوند ، فراهم می نمايد.

Authorization element

<authorization>
<allow roles ="Administrators" />
<deny users="*" />
</authorization>


پس از تائيد کاربر و صدور مجوز لازم به منظور استفاده از برنامه وب ، می توان با استفاده از خصلت Identity مربوط به شی User ، هويت کاربر ( نام و نوع وظيفه ) را از طريق برنامه شناسائی نمود.خصلت فوق، يک شی را که شامل اطلاعات مربوط به نام و وظيفه کاربراست را برمی گرداند .

Web form's code-behind file

Private Sub Page_Load( ByVal sender As System.Object,ByVal e As System.EventArgs ) Handles Mybase.Load
spnAuthenticated.InnerText = User.Identity.IsAuthenticated
spnUserName .InnerText = User.Identity.Name
spnAuthenticationType.InnerText = User.Identity.AuthenticationType
End Sub


به منظور آگاهی و انجام عمليات لازم با توجه به نوع وظيفه کاربر که از برنامه وب استفاده می نمايد ، می توان از متد IsInRole شی User ، استفاده نمود .

IsInRole method

If User.IsInRole("Administrators") Then
'انجام عمليات دلخواه
End If


استفاده از تنظيمات IIS به همراه Windows Authentication
تنظيمات Authorization در فايل Web.Config با تنظيمات انجام شده در IIS با يکديگر Overlap می شوند . در صورتيکه Authorization هم در فايل Web.Config و هم توسط IIS تنظيم شده باشد ، در ابتدا تنظيمات IIS بررسی و در ادامه تنظيمات موجود در فايل Web.Config ، مورد توجه قرار خواهند گرفت. به منظور مشاهده تنظيمات authorization در IIS مراحل زير را دنبال می نمائيم :

در IIS بر روی فولدر برنامه وب کليک سمت راست نموده و در ادامه گزينه Properties را انتخاب می نمائيم . برنامه IIS در ادامه جعبه محاوره ای Properties مربوط به فولدر را نمايش خواهد داد .

بر روی Directory Security Tab کليک و در ادامه دکمه Edit را در گروه Anonymous Access And Authentication Control کليک می نمائيم . IIS ، جعبه محاوره ای Authentication Methods را نمايش خواهد داد .

اولين گروه از تنظيمات در جعبه محاوره ای ، کنترل دستيابی Anonymous را انجام می دهد ( همه کاربران ). غير فعال نمودن گزينه فوق ، معادل <"?" = deny User > در فايل Web.config است.

Check Box های موجود در قسمت دوم جعبه محاوره ای ، مجاز بودن برنامه به منظور استفاده از Basic و يا Digest Authentication را علاوه بر Windows Authentication ، مشخص می نمايد. روش های فوق ، ايمنی بمراتب کمتری را نسبت به Windows Integrated ارائه می نمايند .می توان چندين روش authentication را در IIS فعال نمود . در صورتيکه چندين روش فعال شده باشد ، می توان با استفاده از متد AuthenticationType مربوط به شی Identity ، از روش استفاده شده به منظور تائيد کاربر ، آگاهی يافت .

AuthenticationType method

Response.Write(User.Identity.AuthenticationType)


در بخش سوم اين مقاله به بررسی روش Forms Authentication ، خواهيم پرداخت .

hatef_4541
08-03-2006, 14:16
در بخش سوم اين مقاله به بررسی Forms Authentication خواهيم پرداخت .
همانگونه که در بخش اول اين مقاله اشاره گرديد ، برنامه های وب ASP.NET از سه روش عمده به منظور تائيد کاربران استفاده می نمايند :

Windows Authentication

Forms Authentication

Passport Authentication

در Forms Authentication ، برنامه IIS مسئوليتی را در ارتباط با تائيد کاربران برعهده نگرفته و تنظيمات امنيتی IIS در رابطه با برنامه وب ، دستيابی Anonymous می باشد . فرآيند تائيد کاربران در روش فوق، بصورت زير است :

زمانيکه سرويس گيرنده درخواست يک صفحه ايمن را می نمايد ، IIS کاربر را به عنوان Anonymous، تائيد و در ادامه درخواست وی را برای ASP.NET ارسال می نمايد .

ASP.NET ، بررسی لازم در خصوص وجود يک کوکی خاص بر روی کامپيوتر سرويس گيرنده را انجام خواهد داد .

در صورتيکه کوکی ، موجود نبوده و يا غيرمعتبر باشد ، ASP.NET درخواست کاربر را ناديده گرفته و برای وی يک صفحه Logon را ارسال می نمايد ( مثلا" Login.aspx ).

کاربر اطلاعات لازم ( نام و رمز عبور ) را در صفحه Logon.aspx ( به عنوان نمونه ) درج و در ادامه دکمه Submit موجود بر روی فرم را به منظور ارسال اطلاعات برای سرويس دهنده ، فعال می نمايد.

IIS ، مجددا" کاربر را به عنوان Anonymous، تائيد و درخواست وی را برای ASP.NET ارسال می نمايد .

ASP.NET ، تائيد کاربر را بر اساس اطلاعات ارسالی ( نام و رمز عبور ) انجام و يک کوکی را ايجاد می نمايد .

در نهايت ، صفحه وب ايمن درخواست شده به همراه کوکی جديد برای سرويس گيرنده ارسال می گردد. ماداميکه کوکی معتبر باشد ، کاربر قادر به درخواست و مشاهده ساير صفحات وب می باشد.

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

فرآيند فوق را می توان به دو حالت متفاوت تعميم و مورد توجه قرار داد :

حالت اول : درخواست يک صفحه ايمن از سرويس دهنده ، توسط يک کاربر غيرمجاز و تائيد نشده
مرحله اول : پس از درخواست يک سرويس گيرنده برای دستيابی به يک صفحه ايمن ، درخواست ارسالی وی در ابتدا توسط IIS بررسی و با توجه به اينکه تنظيمات IIS بصورت Anonymous پيکربندی شده تا امکان استفاده از Forms Authentication فراهم گردد ، درخواست کاربر ، مستقيما" برای ماژول ASP.NET Forms Authentication ارسال می گردد .
مرحله دوم : ASP.NET ، بررسی لازم در خصوص وجود ( داشتن ) يک کوکی Authentication را انجام خواهد داد . با توجه به اينکه کاربر اولين مرتبه است که درخواست اطلاعاتی را نموده و دارای يک کوکی نمی باشد ، سرويس گيرنده به صفحه Logon ، هدايت می گردد .
مرحله سوم : کاربراطلاعات ضروری ( نام و رمز عبور ) خود را در صفحه Logon درج و پس ازارسال آنان ،فرآيند بررسی اطلاعات ارسالی آغاز می گردد. در يک برنامه بزرگ ، بررسی اطلاعات کاربر از طريق يک بانک اطلاعاتی شامل مشخصات کاربران انجام می شود .
مرحله چهارم : در صورتيکه اطلاعات ارسالی کاربر ( نام و رمز عبور ) ، پس از بررسی توسط برنامه وب ، معتبر شناخته نگردند ، مجوز دستيابی برای کاربر صادر نشده و امکان دستيابی وی سلب می گردد .
مرحله پنجم : در صورتيکه پس از بررسی اطلاعات ارسالی، اعتبار وصحت آنان تائيد گردد ، يک کوکی تائيد ايجاد و در ادامه به کاربر مجوز لازم به منظور دستيابی به صفحه ، اعطاء می گردد .(هدايت کاربر به صفحه درخواست اوليه ) .

حالت دوم : درخواست يک صفحه ايمن از سرويس دهنده ، توسط يک کاربر مجاز و تائيد شده
مرحله اول : پس از درخواست يک صفحه ايمن توسط سرويس گيرنده ، کوکی Authentication بهمراه درخواست وی برای سرويس دهنده ، ارسال می گردد.
مرحله دوم :درخواست ارسالی توسط سرويس گيرنده در ابتدا توسط IIS دريافت و با توجه به تنظيمات انجام شده ( دسيتابی Anonymous ) ، درخواست وی مستقيما" برای ASP.NET Forms Authentication ارسال می گردد .
مرحله سوم : ماژول ASP.NET Forms Authentication ، بررسی لازم در خصوص کوکی را انجام و در صورتيکه کوکی معتبر باشد ، سرويس گيرنده تائيد و امکان دستيابی و مشاهده صفحه وب درخواستی برای وی ، فراهم می گردد .

در روش Forms Authentication ، بصورت اتوماتيک يک فرم وب طراحی شده به منظور اخذ اطلاعات مربوط به نام و رمز عبور کاربران ، نمايش داده می شود . کد مرتبط با فرم وب ، عمليات تائيد و معتبرسازی کاربر را بر اساس ليست ذخيره شده در فايل Web.Config برنامه و يا از طريق يک بانک اطلاعاتی جداگانه ، انجام می دهد. مزيت مهم Forms Authentication ، عدم ضرورت عضويت کاربران در Domain شبکه به منظور دستيابی به برنامه وب ، می باشد .

فعال نمودن Forms Authentication
به منظور استفاده از روش فوق ، می بايست مراحل زير را دنبال نمود :

مقداردهی Authentication mode در فايل Web.config به Forms

ايجاد يک فرم وب به منظور اخذ اطلاعات کاربران ( Logon Page )

ايجاد يک فايل و يا بانک اطلاعاتی به منظور ذخيره نام و رمز عبور کاربران

نوشتن کد لازم به منظور افزودن کاربر جديد به فايل و يا بانک اطلاعاتی کاربران

نوشتن کد لازم به منظور تائيد کاربران با استناد به فايل و يا بانک اطلاعاتی کاربران

Forms Authentication ، از کلاس های موجود در namespace با نام System.Web.Security استفاده می نمايد . به منظور استفاده از کلاس های فوق، می بايست در ويژوال بيسک دات نت از عبارت Imports و در ويژوال سی شارپ از Using استفاده گردد ( در ابتدای هر ماژول که عمليات تائيد را انجام خواهد داد : Imports System.Web.Security ) .

مقداردهی Authentication mode
نوع تائيد کاربران در يک برنامه وب ، می بايست با استفاده از عنصر <authentication> در فايل Web.config مشخص گردد. به منظور تنظيم برنامه مورد نظر خود برای استفاده از Forms Authentication ، تغييرات زير را در فايل Web.Config ، اعمال می نمائيم :

Web.Config setting for Forms Authentication

<authentication mode="Forms">
<forms loginUrl = Login.aspx" >
<credentials passwordFormat = "Clear" >
<user name = "Ali" Password ="110" />
<user name = "Kaveh" Password ="111" />
</credentials>
</forms>
</authentication>


کد فوق، يک نوع ساده از تائيد کاربران به روش Forms را نشان می دهد . در اين رابطه ، اغلب از تعاريف و تنظيمات پيش فرض و يک ليست کاربران مجاز، استفاده شده است. از عناصر متفاوتی در ارتباط با Forms Authentication در فايل Web.Config استفاده می گردد.هر يک از عناصر دارای خصلت های خاص خود می باشند :

عنصر <authentication>
خصلت Mode ، با استفاده از خصلت فوق ، روش تائيد و شناسائی کاربران مشخص می گردد. با مقدار دهی خصلت فوق به Forms ، روش Forms Authentication انتخاب خواهد شد.

عنصر <forms>
خصلت name . از خصلت فوق به منظور مشخص نمودن نام کوکی که اطلاعات مربوط به نام و رمز عبور را ذخيره می نمايد ، استفاده می شود . مقدار پيش فرض ، authaspx . می باشد . در صورتيکه بيش از يک برنامه بر روی سرويس دهنده از روش Forms Authentication استفاده می نمايند ، می بايست برای هر يک از آنان نام منحصربفردی در نظر گرفته شود .
خصلت loginUrl .از خصلت فوق به منظور مشخص نمودن نام فرم وب Login برای کاربران تائيد نشده ، استفاده می گردد . مقدار پيش فرض خصلت فوق، Default.aspx است .
خصلت protection . با استفاده از خصلت فوق روش حفاظت کوکی Authentication که بر روی کامپيوتر سرويس گيرنده ذخيره می گردد ، مشخص خواهد شد. مقدار پيش فرض خصلت فوق ، All بوده که عمليات رمزنگاری و بررسی اعتبار و صحت داده در رابطه با آن اعمال می گردد. ساير گزينه های موجود در اين راستا ، Encryption,Validation و None می باشد .
خصلت timeout . با استفاده از خصلت فوق ، مدت زمان نگهداری کوکی Authentication بر روی ماشين کاربر مشخص می گردد . مقدار پيش فرض 30 دقيقه است . ASP.NET ، پس از دريافت يک درخواست جديد توسط کاربر و مشروط به گذشت بيش از نصف زمان تعريف شده ، کوکی را تجديد ( Renew ) خواهد کرد .
خصلت path . با استفاده از خصلت فوق ، مسير مورد نظر به منظور ذخيره سازی کوکی بر روی ماشين کاربر مشخص می گردد . مقدار پيش فرض ، "\" است .

عنصر <credentials>
خصلت passwordFormat ، با استفاده از خصلت فوق ، الگوريتم لازم به منظور رمزنگاری رمز عبور کاربر ، مشخص می گردد . مقدار پيش فرض ، SHA1 می باشد . ساير گزينه های موجود در اين رابطه ، MD5 و Clear ( بدون رمزنگاری ) می باشد .

عنصر <users>
خصلت name ، با استفاده از خصلت فوق ، نام کاربر مشخص می گردد.
خصلت password ، با استفاده از خصلت فوق ، رمز عبور کاربر مشخص می گردد.

عنصر <credentilas> ، امکان ذخيره سازی ليست کاربران را در Web.Config فراهم می نمايد . رويکرد فوق ، روشی ساده به منظور تعريف کاربران مجاز يک برنامه وب می باشد . در چنين مواردی ، مديريت سيستم می تواند بسادگی و در صورت لزوم نام و رمز عبور کاربران ديگری را به ليست مجاز کاربران ، اضافه نمايد . مکانيزم فوق ، در مواردی که قصد داشته باشيم ، امکان تعريف نام و رمز عبور را در اختيار کاربران قرار دهيم ، گزينه مناسبی نبوده و می بايست از يک فايل و يا بانک اطلاعاتی به منظور ذخيره سازی اطلاعات کاربران ، استفاده گردد.

در بخش چهارم اين مقاله با نحوه ايجاد بانک اطلاعاتی ، درج مشخصات کاربران و تائيد آنان با استناد به اطلاعات مندرج در بانک اطلاعاتی ، خواهيم پرداخت .

hatef_4541
08-03-2006, 14:20
همانگونه که در بخش سوم اين مقاله اشاره گرديد ، به منظور استفاده از روش Forms Authentication ، می بايست مراحل زير را دنبال نمود :

مقداردهی Authentication mode در فايل Web.config به Forms
ايجاد يک فرم وب به منظور اخذ اطلاعات کاربران ( Logon Page )
ايجاد يک فايل و يا بانک اطلاعاتی به منظور ذخيره نام و رمز عبور کاربران
نوشتن کد لازم به منظور افزودن کاربر جديد به فايل و يا بانک اطلاعاتی کاربران
نوشتن کد لازم به منظور تائيد کاربران با استناد به فايل و يا بانک اطلاعاتی کاربران
در بخش سوم اين مقاله به بررسی اولين مرحله ( مقداردهی Authentication mode در فايل Web.config به Forms ) ، اشاره گرديد . در ادامه به بررسی ساير مراحل لازم به منظور استفاده از روش Forms Authentication ، خواهيم پرداخت .

Web.Config setting for Forms Authentication

<authentication mode="Forms">
<forms loginUrl =" Login.aspx" >
<credentials passwordFormat = "SHA1" >
<user name = "Srco.ir" Password ="110" />
<user name = "SakhaRavesh" Password ="111" />
</credentials>
</forms>
</authentication>


ايجاد يک فرم وب Logon
به منظور تائيد کاربران بر اساس روش Forms Authentication ، نيازمند استفاده از يک فرم وب بوده که با استفاده از آن امکان Logon کاربران ، فراهم گردد. فرم وب با استفاده از عنصر <forms> در فايل Web.Config ، مشخص شده و می تواند صرفا" شامل دو Text box و يک Button و يا شامل فيلدهای اطلاعاتی بيشتری به منظور اخذ اطلاعات کاربران باشد .

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]



Login.aspx

<%@ Page Language="vb" Codebehind="Login.aspx.vb" Inherits="Web1.Login" codePage="65001" %>
<HTML>
<HEAD>
<title>صفحه تائيد کاربران برنامه</title>
<meta name="vs_showGrid" content="True">
<META [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]"Content-Type" content="text/html; charset=utf-8">
</HEAD>
<BODY bgColor="#ffffff">
. ...
<asp:Button id="btnSingIn" runat="server" Text="Sign in"></asp:Button>
<asp:TextBox id="txtUserName" runat="server" Width="99px"></asp:TextBox>
<asp:TextBox id="txtPassword" runat="server" Width="100px" TextMode="Password"></asp:TextBox>
...

Login.aspx.vb
Imports System.Web.Security
Public Class Login
...
Private Sub btnSingIn_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles btnSingOn.Click

If FormsAuthentication.Authenticate(txtUserName.Text, txtPassword.Text) Then
FormsAuthentication.RedirectFromLoginPage(txtUserN ame.Text, True)
Else
txtPassword.Text = ""
If CInt(ViewState("Tries")) > 1 Then
Response.Redirect("Denied.htm")
Else
ViewState("Tries") = CInt(ViewState("Tries")) + 1
End If
End If
End Sub
...
ٍEnd Class

توضيحات

کلاس FormsAuthentication بخشی از namespace با نام System.Web.Security می باشد ، بنابراين می بايست با استفاده از Imports ( در ويژوال بيسک دات نت ) آن را به برنامه Include نمائيم ( درويژوال سی شارپ ، استفاده از Using ) .

متد Authenticate مربوط به کلاس FormsAuthentication با مراجعه به ليست کاربران تعريف شده توسط عنصر<credentials> فايل Web.Config ، بررسی لازم در خصوص نام ورمز عبور کاربر را انجام می دهد.

متد RedirectFromLoginPage مربوط به کلاس FormsAuthentication ، صفحه شروع برنامه وب را نمايش خواهد داد.

در صورتيکه نام و رمز عبور کاربر معتبر نباشد ، به کاربر دو مرتبه ديگر فرصت Logon داده خواهد شد و در صورتيکه صلاحيت کاربر تائيد نگردد ، يک پيام خطاء نمايش داده می شود. صفحه گزارش خطاء از نوع HTM می باشد.( به هيچکدام از فرم های وب موجود در برنامه ، امکان دستيابی وجود نخواهد داشت ). در صورتيکه کاربر با استفاده از روش فوق به صفحه ديگر هدايت می شود ، می بايست از محل استقرار فايل فوق در محيطی خارج از حوزه برنامه مطمئن گرديد .

در مثال فوق ، صفحه شروع برنامه Webform1.aspx ( در بخش دوم اين مقاله ) در نظر گرفته شده است . پس از Logon موفقيت آميز، کاربر به صفحه فوق هدايت خواهد شد . زمانيکه کاربر بر روی دکمه sign in کليک می نمايد ، تائيد کاربر بر اساس نام و رمز عبور انجام و برای وی يک مجوز صادر خواهد شد. بدين ترتيب، کاربر امکان دستيابی به بخش های متفاوت برنامه را بدست می آورد .ماحصل اجرای صفحه فوق ، به صورت زير است :

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

از کلاس FormsAuthentication به منظور Sign out ، و يا حذف کوکی Authentication از روی ماشين کاربر استفاده می گردد.کد زير دستيابی کاربر به برنامه را خاتمه داده و استفاده مجدد از برنامه توسط وی را ملزم به Login مجدد ، می نمايد .

End User's access to an application

Imports System.Web.Security
Private Sub butSignOut_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles butSignOut.Click
FormsAuthentication.SignOut ( )
Response.Redirect( "UserInfo.aspx")
End Sub


تائيد کاربران با استفاده از يک بانک اطلاعاتی
در بخش قبل با فرآيند تائيد کاربران با استفاده از ليست تعريف شده کاربران موجود در فايل Web.Config ، آشنا شديم . متد Authenticate مربوط به کلاس FormsAuthentication ، به منظور خواندن اطلاعات از فايل فوق بصورت اتوماتيک ، پيکربندی شده است . رويکردد فوق ، گزينه ای مناسب در مواردی است که مسئوليت تعريف اسامی و رمز عبور کاربران به مدير سيستم واگذار شده باشد . در صورتيکه قصد داشته باشيم ، امکان تعريف نام و رمز عبور را در اختيار کاربران قرار دهيم ، می بايست اطلاعات مربوط به کاربران خارج از فايل Web.config ذخيره گردد. اعمال تغييرات در فايل Web.config در زمان اجراء ، باعث Restart شدن برنامه شده و Reset تمامی متغيرهای Session و Application استفاده شده توسط برنامه می گردد. دراين رابطه می توان ، اسامی کاربران را در هر نوع فايلی ذخيره نمود . بديهی است استفاده از يک بانک اطلاعاتی، مزايای خاص خود را بدنبال خواهد داشت :

اسامی کاربران می تواند به عنوان کليد اوليه و به منظور ذخيره سازی ساير اطلاعات کاربران استفاده گردد .
بانک های اطلاعاتی دارای کارآئی مطلوب به منظور دستيابی به اسامی و رمز عبور کاربران می باشند .
افزودن ، تغيير و دستيابی به رکوردهای بانک اطلاعاتی با استفاده از استانداردهای SQL انجام خواهد شد .
زمانيکه اسامی و رمز عبور کاربران در يک فايل و يا بانک اطلاعاتی ذخيره می گردد ، می توان با استفاده از متد HashPasswordeForStoringInConfigFile مربوط به کلاس FormsAuthentication ، آنان را رمز نمود. در اين رابطه از الگوريتم های SHA1 و يا MD5 به منظور رمزنگاری داده استفاده می گردد :

Encrypting User names and passwords

Password = FormsAuthentication.HashPasswordForStoringInConfig File ( Password , "SHA1")


افزودن کاربران به يک بانک اطلاعاتی
به منظور افزودن کاربران به يک بانک اطلاعاتی ، اطلاعات مربوط به کاربران شامل نام و رمز عبور را از طريق دو TextBox اخذ و در ادامه با ايجاد يک Event Procedure ، آنان را به بانک اطلاعاتی اضافه نموده و در نهايت پيام مناسبی که نشاندهنده درج اطلاعات کاربر در بانک اطلاعاتی سيستم می باشد ، نمايش داده خواهد شد . روتين زير با فراخوانی تابع AddUser ، نام و رمز عبور کاربر را به بانک اطلاعاتی اضافه می نمايد .

َAdding User to a database

Private Sub butNewUser_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles butNewUser.Click
If AddUser(txtName.Text, txtPassword.Text) Then
spnNote.InnerText = "کاربر جديد به بانک اطلاعاتی کاربران اضافه گرديد "
Else
spnNote.InnerText = "کاربری با اين مشخصات وجود دارد "
End If"
End If
End Sub


تابع AddUser ، که در روتين فوق استفاده شده است ، در ابتدا رمز عبور کاربر را رمز نموده و در ادامه با استفاده از دستور SQL INSERT ، نام و رمز عبور را در بانک اطلاعاتی ذخيره می نمايد .درصورتيکه رمز عبور در نظر گرفته شده توسط کاربر، قبلا" توسط کاربر ديگر تعريف و در بانک اطلاعاتی موجود باشد ، بلاک Exeption -handling ، خطاء را تشخيص داده و مقدار False را مبنی بر عدم افزودن اطلاعات کاربر در بانک اطلاعاتی ، برمی گرداند .

َAddUser Function

Private Function AddUser ( Byval UserName As String , ByVal Password As String ) As Boolean
Dim bSuccess As Boolean
Password = FormsAuthentication.HashPasswordForStoringInConfig File ( Password , "SHA1")
Dim oleCommand As New OleDbCommand ( "INSERT INTO Users " + "Values ( '" + UserName + '" + Password + "')",oledbUsers)
Try
oledbUsers.Open ( )
If oleCommand.ExecuteNonQuery ( ) Then bSuccess = True
oledbUsers.Close ( )
Catch
bSuccess =False
oledbUsers.Close ( )
End Try
Return bSuccess
End Function


در زمان تائيد کاربران با استفاده از ليست مشخص شده کاربران در فايل Web.Config ، از متد Authenticate استفاده می گردد. در موارديکه برای تائيد کاربران از بانک اطلاعاتی استفاده می گردد ، می بايست کد لازم به منظور يافتن و مقايسه نام و رمز عبور کاربران ، نوشته گردد . روتين زير ، از تابع CheckPassword به منظور تائيد نام و رمز عبور استفاده نموده و در صورتيکه صلاحيت کاربر تائيد گردد به وی امکان دستيابی به برنامه داده خواهد شد.

َAuthenticating Users from a database

Private Sub butSignOn_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles butSignOn.Click
If CheckPassword(txtName.Text, txtPassword.Text) Then
FormsAuthentication.RedirectFromLoginPage(txtName. Text, True)
Else
spnNote.InnerText = "نام و يا رمز عبور اشتباه است ، مجددا سعی نمائيد"
ViewState("tries") = ViewState("tries") + 1
If ViewState("Tries") > 3 Then
Response.Redirect("Denied.htm")
End If
End If
End Sub


تابع CheckPassword ، در ابتدا رمز عبور کاربر را با استفاده از الگوريتم مشخص شده ، رمز می نمايد. در ادامه ، رکورد بانک اطلاعاتی بر اساس نام جستجو و پس از يافتن رکورد مربوطه، مقايسه بين رمز عبور رمز شده در مقابل رمز عبور موجود در بانک اطلاعاتی ، انجام خواهد شد . دستيابی به بانک اطلاعاتی از طريق يک بلاک Exception handling انجام تا پيشگيری لازم در خصوص مسئله Locking ، انجام شود .

َCheckPassword Function

Private Function CheckPassword ( Byval UserName As String , ByVal Password As String ) As Boolean
Dim bSuccess As Boolean
Password = FormsAuthentication.HashPasswordeForStoringInConfi gFile ( Password , "SHA1")
Dim oleCommand As New OleDbCommand ( "SELECT * FROM Users" + "WHERE UserName='" + txtName.Text + "'" , oledbUsers )
Try
oledbUsers.Open ( )
Dim rdrUsers As OledbDataReader = oleCommand.ExecuteReader ( )
While rdrUsers.Read( )
If Password =rdrUsers.Item("Password") Then bSuccess = True
End While

If oleCommand.ExecuteNonQuery ( ) Then bSuccess = True
oledbUsers.Close ( )
Catch
bSuccess =False
oledbUsers.Close ( )
End Try
Return bSuccess
End Function


تمامی کاربران با توجه به تنظيمات انجام شده در بخش <authentication> فايل Web.config ، بصورت اتوماتيک به صفحه LoginBaseDb.aspx هدايت خواهند شد .

Web.Config file setting for <authentication> element

<authentication mode="Forms">
<forms name="Test1Cookie" loginUrl ="LoginBaseDB.aspx" timeout="15"></forms>
</authentication>


صفحه LoginBaseDb.aspx :

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

در صورت درج نام و رمز عبور غيرمعتبر و فشردن دکمه "ورود به سايت " توسط کاربر ، يک پيام خطاء نمايش داده می شود ( در صورت تائيد نام و رمز عبور ، امکان دستيابی کاربر به برنامه فراهم می گردد) .

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

پس از درج نام و رمز عبور و فشردن دکمه " کاربر جديد " ، مشخصات کاربر در بانک اطلاعاتی کاربران ذخيره می گردد .

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

در بخش پنجم اين مقاله به بررسی روش Passport Authentication خواهيم پرداخت .

hatef_4541
08-03-2006, 14:22
در بخش پنجم اين مقاله به بررسی Passport Authentication خواهيم پرداخت .
همانگونه که در بخش اول اين مقاله اشاره گرديد ، برنامه های وب ASP.NET از سه روش عمده به منظور تائيد کاربران استفاده می نمايند :

Windows Authentication

Forms Authentication

Passport Authentication

زمانيکه از سرويس وب Passport مايکروسافت به منظور تائيد کاربران استفاده می گردد ، مسئوليت تائيد کاربران از IIS و برنامه وب سلب شده و اين وظيفه به سايت Passport.com واگذار می گردد. در روش Passport Authentication ، شناسائی کاربران بر اساس سرويس وب ارائه شده توسط Passport.com صورت می پذيرد . در روش فوق ، تائيد کاربران متمرکز و پس از تائيد آنان ، امکان استفاده از ساير سايت هائی که از Passport Authentication استفاده می نمايند ، وجود خواهد داشت .اطلاعات کاربران در يک پروفايل و بر روی سايت Passport.com ذخيره و ساير سايت های متقاضی که نيازمند تائيد کاربر به منظور ارائه خدمات خود می باشند ، می توانند ازاطلاعات کاربران استفاده نمايند . مهمترين ويژگی روش Passport Authentication ، استفاده از يک نام و رمز عبور به منظور استفاده از سايت های متعدد می باشد . فرآيند تائيد کاربران در روش فوق، بصورت زير است :

پس از درخواست يک صفحه ايمن توسط سرويس گيرنده ، درخواست وی در ابتدا برای IIS ارسال می گردد.

IIS ، کاربر را به عنوان Anonymous تائيد و درخواست وی را برای ASP.NET ارسال می نمايد .

ASP.NET ، بررسی لازم در خصوص وجود يک کوکی خاص را بر روی سرويس گيرنده انجام خواهد داد . در صورتيکه کوکی مورد نظر بر روی کامپيوتر سرويس گيرنده موجود نباشد ، درخواست کاربر ناديده گرفته شده و وی به وب سايت Passport.com به منظور تائيد صلاحيت ، هدايت می گردد .

سايت Passport.com ، يک فرم Login را توليد و برای سرويس گيرنده ارسال می نمايد .سرويس گيرنده اطلاعات Logon را در آن درج و مجددا" اطلاعات را برای سايت Passport.com ارسال می نمايد .

در صورتيکه اطلاعات درج شده توسط کاربر ( نام و رمز عبور) با اطلاعات موجود در بانک اطلاعاتی پاسپورت مطابقت نمايد ، Passport.com سرويس گيرنده را تائيد و يک کوکی به همراه اطلاعات ذيربط ( مشابه يک بليط ) برای وی ارسال می نمايد .

درخواست سرويس گيرنده مجددا" برای سرويس دهنده و اين مرتبه به همراه مجوز صادر شده توسط Passport.com ، ارسال می گردد. IIS ، مجددا" سرويس گيرنده را به عنوان Anonymous تائيد و درخواست وی را برای برنامه وب ASP.NET ارسال می نمايد .

برنامه وب ASP.NET تائيد کاربر را بر اساس مجوز صادر شده برای وی توسط Passport.com ، انجام داده و صفحه وب درخواستی را برای سرويس گيرنده ارسال می نمايد .

پس از تائيد کاربر توسط Passport.com ، امکان دستيابی وی به ساير وب سايت هائی که از روش Passport Authentication استفاده می نمايند ، وجود خواهد داشت .

[ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ]

فعال نمودن روش Passport Authentication
به منظور استفاده از روش Passport Authentication در يک برنامه وب ، می بايست Passport SDK را بر روی سيستم نصب نمود. ( برای دريافت نرم افزار می توان از آدرس [ برای مشاهده لینک ، لطفا با نام کاربری خود وارد شوید یا ثبت نام کنید ] ، استفاده نمود ) . برای فعال نمودن روش PassportAuthentication مراحل زير را دنبال می نمائيم :

نصب Passport SDK . ( با اينکه نرم افزار فوق به همراه ويژوال استوديو ارائه نشده است ،ولی فريمورک دات نت دارای کلاس های لازم به منظور کار با Passport SDK پس از نصب آن می باشد ) .

اعمال تغييرات لازم در فايل Web.config : نوع Authentication به Passport و مقدار عنصر Authorization به Deny برای کاربران تائيد نشده

استفاده از رويداد PassportAuthentication_OnAuthenticate به منظور دستيابی به پروفايل اطلاعات کاربران و شناسائی آنان

پياده سازی روتين Sign-out به منظور حذف کوکی های Passport از روی ماشين کاربران

فايل Web.config زير ، روش Passport Authentication را فعال و تمامی کاربران را ملزم به تائيد به منظور استفاده از برنامه وب می نمايد .

Web.Config setting

<authentication mode="Passport" />
<authorization>
<adeny users="?" />
</authorization>


زمانيکه برنامه وب بصورت محلی و با توجه به تنظيمات فوق ، اجراء می گردد ، کاربر مستقيما" به صفحه Signin پاسپورت هدايت می گردد. در صورتيکه نسخه unlicense نرم افزار Passpport SDK ، نصب شده باشد ، صفحه Signin مشابه صفحه ارائه شده در زمان بکارگيری واقعی يک سايت نخواهد بود. پس از Sign in کاربر ، Passport کوکی تائيد کاربر را بر روی ماشين سرويس گيرنده ذخيره و وی را به صفحه اوليه درخواستی هدايـت و يک پروفايل اطلاعاتی در ارتباط با کاربر را ذخيره می نمايد . به منظور دستيابی به پروفايل فوق می توان از رويداد PassportAuthentication_OnAuthenticate ، در Global.asax استفاده نمود :

Global.asax module

Imports System.Web.Security
Private Sub PassportAuthentication_OnAuthenticate( ByVal Sender As Object , ByVal e As PassportAuthenticationEventArgs )
If e.Identity.IsAuthenticated Then
Response.Write(" Name : " & e.Identity.Item("FirstName") &" " & e.Identity.Item("LastName") & "<br>")
Response.Write("Address : " & e.Identity.Item("City") & " " & e.Identity.Item("PostalCode") & "<br>" )
Response.Write("Email : " & e.Identity.Item("PreferredEmail") & "<br>" )
Response.Write("Passport ID : " & e.Identity.Name & "<br>" )
End If
End Sub


کد فوق ، نام ، آدرس و ساير اطلاعات کاربر را از طريق پروفايل مربوطه دريافت و آنان را نمايش می دهد.
مجوز صادر شده Passport به همراه اطلاعات پروفايل در پنج کوکی جداگانه بر روی ماشين سرويس گيرنده ، ذخيره می گرندد. پس از Sign out کاربر از برنامه وب ، می بايست کوکی های فوق حذف گردند . رويداد زير ، نحوه عمليات Sign out را از طريق حذف کوکی های مرتبط با Passport نشان می دهد :


Sign out Event Procedure

Private Sub butSignOut_Click ( ByVal sender As System.Object , ByVal e As System.EventArgs ) Handles butSignOut.Click
Response.Cookie("MSPProf").Expires = Now
Response.Cookie("MSPAuth").Expires = Now
Response.Cookie("MSPSecAuth").Expires = Now
Response.Cookie("MSPProfC").Expires = Now
Response.Cookie("MSPConsent").Expires = Now
Response.Redirect("UserInfo.aspx")
End Sub