درک مفهوم اعتبارسنجی در ویندوز

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

درک مفهوم اعتبارسنجی در ویندوز

دستور کار

1- مفهوم اعتبار سنجی (Authentication) و احراز هویت (Authorization) چیست؟

2- درک مفهوم اعتبارسنجی

3- انواع اعتبارسنجی ویندوز

4- برنامه های اعتبارسنجی

5- جعل هویت

اعتبارسنجی و احراز هویت:

به زبان ساده،  اعتبارسنجی یک فرایند برای آدرس دهی به سوالات است. اعتبارسنجی برای بدست آوردن یک نام کاربری و رمز عبور معتبر در اینترنت یا سیستم Interanet انجام شده است. وقتی یک کاربر اعتبار سنجی شد، سیستم تائید میکند که شما به هر قسمتی که میخواهید متصل شوید. با این حال، اعتبارسنجی اجازه دسترسی به تمام منابعی که شما خواستار استفاده از آن ها هستید را نمیدهد، بلکه برای این کار شما باید ابتدا احراز هویت شوید.

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

مروری بر اعتبارسنجی ویندوز:

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

اعتبارسنجی مبتنی بر ویندوز، اداره کردن Windows Server و دستگاه سرویس گیرنده است.

برنامه کاربردی ASP.NET وابسته به Internet Information Server (IIS) است. تمام درخواست های کاربران وب مستقیما به IIS می رود و و این یک فرایند اعتبارسنجی در مدل های اعتبارسنجی مبتنی بر ویندوز را فراهم میکند. این نوع اعتبارسنجی در محیط اینترنت برای هر کاربری که درخواست Log In شدن به هر شبکه ای را می دهد بسیار کاربردی است.

در این مقاله، می توانید از اعتبارنامه که در فرایند اعتبارسنجی و احراز هویت قرار دارد استفاده کنید. این اعتبارسنجی در IIS انجام شده است. این اولین اعتبارنامه کاربر را از ورود به دامنه می پذیرد. "Domain\UserName And Password". زمانی که این فرایند با موفقیت انجام نشود، سپس IIS یک پیغام خطا نشان میدهد و از شما میخواهد که آیا مایل به ورود دوباره به شبکه هستید؟

مزایای اعتبارسنجی ویندوز:

1- اعتبارسنجی ویندوز متکی بر اجازه کاربر به استفاده از حساب کاربری ویندوز است.

2- ایجاد اصولی برای یک مدل احراز هویت یکنواخت برای نوع های پیچیده از برنامه کاربردی

3- اجرا کردن اعتبارسنجی ویندوز برای توسعه دهندگان بسیار آسان است.

معایب اعتبارسنجی ویندوز:

1- تنها با Platform مایکروسافت قابل اجرا است.

2- Platform بدون کنترل سفارشی یک فرآیند اعتبارسنجی را ایجاد میکند.

برای تنظیم برنامه کاربردی ASP.NET خود، برای کار با اعتبارسنجی مبتنی بر ویندوز، تعدادی گروه و کاربر ایجاد کنید. در سیستم عامل ویندوز خود، به Control Panel رفته در قسمت User Account گزینه Manage another account را بزنید. در قدم بعدی Create a New account را انتخاب کرده و Add or Remove User را کلیک کنید.حال یک حساب کاربری مانند تصویر زیر با عنوان Test ایجاد کنید.

بخش 1-1. ایجاد کاربر جدید

انواع اعتبارسنجی ویندوز

در طول اجرای اعتبارسنجی ویندوز، به طور معمول IIS یک طیف وسیعی از استراتژی های ممکن را برای اعتبارسنجی هر درخواستی که رسیده پیشنهاد میکند، همانطور که میبینید:

1- اعتبارسنجی اولیه

2- تحلیل اعتبارسنجی

3- ترکیب اعتبارسنجی

4- اعتبارسنجی UNC

5- اعتبارسنجی های ناشناس

قبل از اینکه استفاده از اعتبارسنجی ویندوز را آغاز کنید، درمورد پیش نیازها تحقیق کنید، به عبارت دیگر همان پیکربندی IIS. شما باید تائید کنید که IIS در مرورگر شما با تایپ کردن آدرس http://localhost (or http://127.0.0.1) نصب شده است. پیج زیر در مرورگر نمایش داده میشود و  به این معنی است که IIS پیکربندی شده است.

بخش 1-2. صفحه IIS

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

بخش 1-3. ویژگی های ویندوز

این فرآیند ممکن است برای پیکربندی کمی زمان بر باشد. بعد از اتمام فرایند شما میتوانید IIS Manager را از Administrative Tools و یا به صورت مستقیم از طریق  inetmger command اجرا کنید. در شکل زیر صفحه IIS را بعد از اجرا می بینید.

بخش 1-4. مدیریت IIS

نکته: پیشنهاد می شود که قبل از ایجاد حساب کاربری نسخه ASP.NET 4.0  با IIS 7.0 web server شما یک پروژه  "aspnet_regiis.exe -i" با command ایجاد کنید.

اعتبار سنجی اولیه

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

بخش 1-5. اعتبارسنجی اولیه IIS

بعد از اینکه کاربر یک حساب کاربری داخلی تحت ویندوز ایجاد کرد، داده ها به web server فرستاده می شود. وقتی IIS اطلاعات مربوط به اعتبارسنجی را دریافت کرد، کاربر را با حساب کاربری ویندوز اعتبارسنجی می کند. رمز عبور هم با Base64 رمزگذاری شده و به   سرور ارسال می شود. لازم به ذکر است که رمزگذاری با Base64 رمزنگاری محسوب نمی شود.

پس نتیجه این فرایند این است که  در طول فرایند ایجاد ارتباط نام کاربری و رمز عبور در یک Text خالی ارسال شده است.

به منظور درک بهتر این مطلب، یک وب سایت ASP.NET بر روی local IIS وب سرور ایجاد کنید. از روش زیر برای ایجاد نمونه موردنظر استفاده کنید.

1- در ابتدا Visual Studio 2010 را اجرا نمایید. به منوی File رفته و گزینه New و Website را انتخاب کنید. و نام "WinAuthTest" را برای آن انتخاب کنید.

بخش 1-6. وب سایت جدید ASP.NET

2- اطمینان حاصل کنید که IIS 7.0 با ASP.NET 4.0 طبق مراحلی که قبلا گفته شد پیکربندی شده است.  

IIS Manager -3 را با استفاده از inetmgr command در ویندوز اجرا کنید.

4- حال در IIS Manager می بینید که وب سایت "WinAuthTest" با مسیر مجازی مربوطه به پروژه اضافه شده است. در زیر می بینید.

بخش 1-7. IIS

5- بر روی Authentication در زیر IIS در پنجره موجود کلیک کرده. صفحه زیر همان صفحه درخواستی ما است.

بخش 1-8. اعتبارسنجی

6- ممکن است که تمام گزینه های اعتبار که در بالا می بینید برای شما نمایش داده نشود، زیرا آنها به صورت پیش فرض روشن می شوند. پس شما می توانید به صورت دستی آنها را از طریق Windows Features در زیر گزینه Internet Information Services Security پیکربندی کنید.

بخش 1-9. گزینه های امنیتی IIS

7- همانطور که در بخش 1-8 دیدید، اعتبارسنجی اولیه را غیرفعال کنید و با زدن دکمه F5 پروژه ASP.NET "WinAuthTest" را Compile کنید. ویندوز تصویر بخش 1-8 را به شما نمایش میدهد.

8- حال حساب کاربری موقتی که در بخش 1-1 ساختید را وارد کنید. ویندوز اجازه باز شدن وب سایت را در طول وارد نمودن  نام کاربری و رمزعبور صحیح به شما می دهد.

چکیده اعتبارسنجی (Digest Authentication)

چکیده اعتبارسنجی مانند اعتبارسنجی اولیه، به کاربر درخواست می دهد که حساب کاربری خود را با استفاده از فرم ورود به سیستم که در مرورگر نمایش داده می شود را وارد کند. برخلاف اعتبار اولیه، نام کاربری و رمزعبور به Text  خالی فرستاده نشده، در عوض، یک رشته امن Hash رمزنگاری شده فرستاده می شود. ما می توانیم این اعتبارسنجی را با فعال کردن گزینه هایی که در تصویر زیر می بینید به سادگی اجرا کنیم.

بخش 1-10 . چکیده اعتبارسنجی (Digest Authentication)

چکیده اعتبارسنجی شامل رمزنگاری (hash) رمزعبور کاربر با استفاده از الگوریتم MD5 است. ویندوز قادر به ذخیره رمزعبوری که با MD5 برای حساب کاربری محلی (SAM database)، رمزنگاری (hash) شده است ، نمیباشد. که محدودیت چکیده اعتبارسنجی در IIS این است که توابع زمانی که virtual directory اعتبارسنجی شده باشد و یا از طریق کنترلر Windows Active Directory Domain کنترل شود.

چکیده اعتبارسنجی با ترکیب قطعه ای از اطلاعات درباره درخواست به عنوان الگوریتم hash، از کاربران و برنامه های کاربردی در برابر تنوع حملات مخرب محافظت میکند.

فعال و غیرفعال کردن چکیده اعتبارسنجی از طریق برنامه نویسی میتواند انجام شود. می توانیم این اعتبار را با استفاده از AppCmd command فعال کنیم. در زیر ببینید:

appcmd.exe set config /section:digestAuthentication /enable:true  

اعتبارسنجی ویندوز یکپارچه:

اعتبارسنجی ویندوز یکپارچه یک فرایند منطقی برای برنامه های کاربردی تحت LAN-WAN است. برای اینکه این اعتبارسنجی با موفقیت انجام شود، هم مشتری هم سرور باید در یک شبکه یکسان باشند. در واقع، اعتبارسنجی یکپارچه هیچ اطلاعات معتبری را ارسال نمیکند. در عوض، اعتبارسنجی یکپارچه با دامنه سرور ، جایی که Log in شده تا کامپیوتر اطلاعات اعتبارسنجی را به سرور ارسال کند هماهنگ شده است.

اعتبارسنجی بدون هیچ وابستگی به مشتری انجام می شود. وقتی IIS از مشتری میخواهد که خود را اعتبارسنجی کند، مرورگر یک نشانه (token) ارسال میکند تا حساب کاربری ویندوز را از کاربر فعلی مهار کند. این اعتبارسنجی شامل 2 فرایند احراز هویت است، NTLM و Kerberos. فعال کردن ترکیب اعتبارسنجی با IIS Manager به طور معمول از هر دو فرایند حمایت می کند. در زیر میبینید.

بخش 1-11.  اعتبارسنجی هماهنگ

اعتبارسنجی :UNC

نامگذاری جهانی (Universal Naming Convention) اعتبارسنجی به شما اجازه میدهد تا IIS را برای استفاده ی یک حساب کاربری مشخص در زمان دسترسی از راه دور به منابع مشترک پیکربندی کند. این اعتبارسنجی در طول ایجاد یک پوشه مجازی برای برنامه کاربردی اجرا می شود. از روشهای زیر برای پیکربندی اعتبارسنجی UNC استفاده کنید.

IIS Manager -1 را از طریق inetmgr در قسمت Run در ویندوز اجرا کنید.

 2- وب سایت خود را در هر قسمتی که تمایل دارید پوشه مجازی خود را اضافه کنید قرار دهید.

کلیک راست نموده و "Add Virtual Directory" را انتخاب کنید.

بخش 1-12. اعتبارسنجی UNC

3- یک اسم مستعار برای زمانی که پوشه باید در دسترس باشد و همچنین یک مسیر فیزیکی برای UNC

همانند شکل زیر انتخاب کنید.

بخش 1-13. اعتبارسنجی UNC

4- برروی دکمه "Connect as" کلیک کرده و "Application User" را تیک بزنید و یک حساب کاربری مشخص انتخاب کنید. و در نهایت OK را انتخاب کنید.

بخش 1-14. حساب کاربری

اعتبارسنجی ناشناس (Anonymous Authentication)

زمانی که اعتبارسنجی ناشناس فعال است،کاربر از راه دور نیاز به فراهم کردن اعتبار برای دسترسی به یک فایل ندارد به صورت پیش فرض، حساب کاربری در دسترسی که پیکربندی شده است، یک حساب IUSR ساخته شده بعد از نصب IIS است. اعتبارسنجی ناشناس میتواند از IIS Manager پیکربندی شود.به تصویر زیر توجه کنید.

بخش 1-15 . اعتبارسنجی ناشناس

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

اعتبارسنجی برنامه نویسی (Programmatic Authentication)

شما میتوانید تعدادی اطلاعات اضافی درباره کاربر معتبری که در دسترس هستند را بگیرید با استفاده از کلاس WindowsIdentity. کد زیر را مشاهده کنید:

1.	using System;  
2.	using System.Configuration;  
3.	using System.Web;  
4.	using System.Web.Security;  
5.	using System.Security.Principal;  
6.	   
7.	public partial class _Default : System.Web.UI.Page  
8.	{  
9.	    protected void Button1_Click(object sender, EventArgs e)  
10.	    {  
11.	        if (Request.IsAuthenticated)  
12.	        {  
13.	            // Display generic identity information.  
14.	            lblData.Text = "<b>Name: </b>" + User.Identity.Name;  
15.	             
16.	            if (User is WindowsPrincipal)  
17.	            {  
18.	                WindowsPrincipal principal = (WindowsPrincipal)User;  
19.	                lblData.Text += "<br><b>Power user? </b>";  
20.	                lblData.Text += principal.IsInRole(  
21.	                WindowsBuiltInRole.PowerUser).ToString();  
22.	   
23.	                WindowsIdentity identity = principal.Identity as WindowsIdentity;  
24.	                lblData.Text += "<br><b>Token: </b>";  
25.	                lblData.Text += identity.Token.ToString();  
26.	                lblData.Text += "<br><b>Guest? </b>";  
27.	                lblData.Text += identity.IsGuest.ToString();  
28.	                lblData.Text += "<br><b>System? </b>";  
29.	                lblData.Text += identity.IsSystem.ToString();  
30.	            }  
31.	        }  
32.	    }  
33.	}  

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

بخش 1-16.  اطلاعات

جعل هویت:

جعل هویت مرحله ای است که تحت یک برنامه کاربردی میتواند هویت کاربر را برای دسترسی به تمام منابع مجاز میکند. به جای استفاده از یک حساب ثابت برای تمام کاربران، صفحات وب و برنامه های کاربردی، شما می توانید موقتا هویت خود را که ASP.NET برای وظایف خاص استفاده می کند، تغییر دهید.

ممکن است بخواهید به تعدادی منبع وابسته به سیستم local خود که ملزم به متصل شدن با اطلاعات معتبر است دسترسی داشته باشید. شما تعدادی فایل در آدرس "C:\temp\" دارید. ویرایشگر ACL تمام گروه های موجود در پوشه temp را حذف میکند. و تنها مدیر و گروه های وابسته به مدیر را باقی میگذارد. به تصویر زیر توجه کنید:

بخش 1-17. ACL

حال یک برنامه کاربردی ساده تحت وب در ASP.NET ایجاد کنید که شامل یک دکمه (Button) و یک کنترل (Liat Box) برای دستیابی به تمام فایل هایی که در پوشه Temp وجود دارد باشد.

کدهای این برنامه:

1.	protected void btnAccessFiles_Click(object sender, EventArgs e)  
2.	{  
3.	    String[] xfiels = Directory.GetFiles(@"c:\temp");  
4.	  
5.	   
6.	    foreach (string a in xfiels)  
7.	    {  
8.	        ListBox1.Items.Add(a.ToString());   
9.	    }  
10.	}  

 حال برنامه کاربردی را در IIS برای استفاده در اعتبارسنجی یکپارچه درویندوز پیکربندی کنید. در پایان یک پروژه ایجاد کنید. وقتی که شما برای دسترسی به فایلهای پوشه temp بر روی دکمه کلیک می کنید، با یک پیغام خطا به نشانه عدم دسترسی به پوشه "C:\temp" مواجه شوید. این به این نشانه است برنامه شما با یک حساب کاربری ASP.NET در حال اجرا است که اجازه دسترسی به پوشه موردنظر را به خاطر ACL به شما نمیدهد.

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

ما باید کد زیر را در بخش web.config برای جعل هویت مدیر اضافه کنیم.

1.	<configuration>  
2.	   <system.web>  
3.	    <identity impersonate ="true" userName ="VidyaVrat" password ="abc123"/>  
4.	  </system.web>  
5.	</configuration>  

حال یک پروژه جدید برای تست برنامه کاربردی ایجاد کنید و این برنامه باید بدرستی با کلیک برروی دکمه Button اجرا شود. خروجی موردنظر:

بخش 1-18. خروجی

همچنین شما می توانید با استفاده از IIS Manager جعل هویت را پیکربندی کنید. حال از مثال قبلی به عنوان منبع استفاده میکنیم. وقتی که شما تمام برنامه ها و سایر پیکربندی های مربوط به جعل هویت را انجام دادید،  گزینه جعل هویت ASP.NET در IIS Manager فعال و با حساب کاربری "VidyaVrat" پیکربندی میشود. ماند تصویر زیر