ورود

View Full Version : Forms Authentication with Active Directory



mohsen_zelzela00
شنبه 20 شهریور 1389, 11:47 صبح
با سلام خدمت اساتید محترم

من در یک پروژه برای مسله Authenticat می خوام از ActiveDirectory استفاده کنم به این صورت که وقتی کاربر UserName و Password خودشو هنگام ورود به Windows یا همان Domain وارد کرد و login اون با موفقیت انجام شد هنگام که سایت ما رو باز کند سایت ما هم از اون UserName و Password استفاده کند
و کاربر احتیاجی برای Login در وب سایت ما نداشته باشد

ممنون میشم اساتید محترم راهنمایی کنند

mohammad272005
شنبه 20 شهریور 1389, 16:18 عصر
من الان Visual Studio ندارم. واسه همین اونچه یادم میادو میگم. فایل System.DirectoryServices (یا یه همچین اسمی) رو ASdd Reference کن و از کلاس DirectoryEntry کاربر جاری Active directory رو بگیر. البته AD کلمه عبور بهت نمی ده. ولی اگه کاربر جاری null نباشه پس حتما authorize بوده که login کرده.

mohsen_zelzela00
شنبه 20 شهریور 1389, 18:12 عصر
من الان Visual Studio ندارم. واسه همین اونچه یادم میادو میگم. فایل System.DirectoryServices (یا یه همچین اسمی) رو ASdd Reference کن و از کلاس DirectoryEntry کاربر جاری Active directory رو بگیر. البته AD کلمه عبور بهت نمی ده. ولی اگه کاربر جاری null نباشه پس حتما authorize بوده که login کرده.

مرسی دوست عزیز

فقط اینجا یه سوالی که هست من میخوام در این وب سایت کاربر بتونه یه سری درخواست رو در پایگاه داده ذخیره کند و برای اینکه من متوجه بشم که چه کسی این درخواست رو ثبت کرده باید شماره پرسنلی یا اینکه UserName اونو داشته باشم

برای این مورد به نظر شما چه باید کرد؟؟؟؟


ممنون میشم راهنمایی کنید.

alonemm
یک شنبه 21 شهریور 1389, 09:07 صبح
دوست عزیز برای دریافت یوز نیم می تونی از همان کلاس به صورت زیر استفاده کنید.

Entry.username
که باید از نوع کلاس DirectoryEntry تعریف شده باشد.

spicirmkh
جمعه 27 اسفند 1389, 12:17 عصر
سلام
من می خواهم برنامه تحت وب اعتبار سنجی از طریق Active Directory انجام دهم

تا جائی که جستجو کردم باید نام کامپیوتر با دستور Environment.MachineName بدست آورم و با داشتن نام کامپیوتر توی Active Dirctory بگردم

ببینم این نام کامپیوتر دارای Username و First Name و LastNAme بدست آورم

آیا روش من درست است یا روش بهتری است

ضمنا من از SQl Server 2008 در برنامه ام استفاده می کنم خود SQL این ابزار دارد با تشکر

spicirmkh
چهارشنبه 03 فروردین 1390, 15:24 عصر
اساتید محترم لطفا جواب بدهید پروژه من با این مشکل برخورد کرده م

alonemm
شنبه 06 فروردین 1390, 12:14 عصر
باسلام:
System.DirectoryServices از این فضای نام استفاده کنید.
در MSDN کلاس های این فضای نام رو جستجو کنید.

spicirmkh
یک شنبه 14 فروردین 1390, 18:48 عصر
برای بدست آورذن نام user که لاگین کرده است از دستور


DirectoryEntry newEntry = newDirectoryEntry();
Label1.Text = newEntry.Username ;

استفاده کرده ام اما مقدار null بر می گردد

spicirmkh
دوشنبه 15 فروردین 1390, 19:07 عصر
این لینک ببینید

http://www.ianatkinson.net/computing/adcsharp.htm

باز این کد نتوانست مشکل من حل کند چون من username و domain و پسورد ندارم

با تشکر

mohsen_zelzela00
پنج شنبه 25 فروردین 1390, 10:52 صبح
سلام دوست عزیز
شما اول باید این تنظیمات را در فایل Web.Config اعمال کنید

<authentication mode="Windows">


بعد از آن در صفحه اصلی برای اینکه ببینید که چه کاربری Login کرده از یکی از دو روش زیر استفاده می کنید

string username = HttpContext.Current.Request.ServerVariables["AUTH_USER"];

یا

string[] str = User.Identity.Name.Split('\\');

که در روش دوم هم نام و هم نام Domain رو بهت میده حالا اگه بخوای به مشخصات آن در AD دسترسی داشته باشید از کد زیر استفاده کنید

using(DirectoryEntry de = new DirectoryEntry("LDAP://MyDomainController"))
{
using(DirectorySearcher adSearch = new DirectorySearcher(de))
{
adSearch.Filter = "(sAMAccountName=someuser)";
SearchResult adSearchResult = adSearch.FindOne();
}
}

spicirmkh
شنبه 27 فروردین 1390, 10:43 صبح
سلام

روی سیستم خودم این کد اجرا کردم مقدار domin و user داد ولی وفتی برنامه روی سرور Publish و اجرا کردم مقدارش null بود



string username = HttpContext.Current.Request.ServerVariables["AUTH_USER"];
string[] str = User.Identity.Name.Split('\\');
Label1.Text = str[0];
Label2.Text = str[1];
Label3.Text = username ;


ضمنا در این قسمت برنامه



using (DirectoryEntry de = new DirectoryEntry("LDAP://MyDomainController"))
{
using (DirectorySearcher adSearch = new DirectorySearcher(de))
{
adSearch.Filter = "(sAMAccountName=someuser)";
SearchResult adSearchResult = adSearch.FindOne();
}
}

آیا مقدار domin و user MyDomainController و someuser قرار می دهیم
با تشکر

mohsen_zelzela00
شنبه 27 فروردین 1390, 14:07 عصر
سلام

روی سیستم خودم این کد اجرا کردم مقدار domin و user داد ولی وفتی برنامه روی سرور Publish و اجرا کردم مقدارش null بود



غیر ممکنه!!!!!!!!!!!!!!!!!!!! من خودم از این روش برای نرم افزار خودم استفاده کردم.

در مورد دوم من کد رو یه تفییری دادم که شما بهتر متوجه بشید

using (DirectoryEntry de = new DirectoryEntry("LDAP://DomainName"))
{
using (DirectorySearcher adSearch = new DirectorySearcher(de))
{
adSearch.PropertiesToLoad.Add("sn");
adSearch.PropertiesToLoad.Add("givenName");
SearchResult adSearchResult = adSearch.FindOne();

DirectoryEntry de2 = adSearchResult.GetDirectoryEntry();
Response.Write(de2.Properties["givenname"].Value);
Response.Write(de2.Properties["sn"].Value);

}
}

mohsen_zelzela00
شنبه 27 فروردین 1390, 15:19 عصر
البته یه راه سادش اینه که از کد زیر استفاده کنی

using System.DirectoryServices.AccountManagement;


و برای بدست اوردن FullName کاربری که Login کرده کد زیر رو می نویسیم

string b = UserPrincipal.Current.DisplayName;

البته با استفاده از UserPrincipal.Current خیلی از اطلاعات CurrentUser رو میشه بدست اورد.
به همین سادگی.

spicirmkh
شنبه 27 فروردین 1390, 16:57 عصر
البته یه راه سادش اینه که از کد زیر استفاده کنی

using System.DirectoryServices.AccountManagement;



توی web App این NameSpace نیست فکر کنم windows 7 این دستور پشتیبانی نمی کند


Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role not supported), Windows Server 2003 SP2

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

spicirmkh
شنبه 27 فروردین 1390, 17:17 عصر
غیر ممکنه!!!!!!!!!!!!!!!!!!!! من خودم از این روش برای نرم افزار خودم استفاده کردم.

در مورد دوم من کد رو یه تفییری دادم که شما بهتر متوجه بشید

using (DirectoryEntry de = new DirectoryEntry("LDAP://DomainName"))
{
using (DirectorySearcher adSearch = new DirectorySearcher(de))
{
adSearch.PropertiesToLoad.Add("sn");
adSearch.PropertiesToLoad.Add("givenName");
SearchResult adSearchResult = adSearch.FindOne();

DirectoryEntry de2 = adSearchResult.GetDirectoryEntry();
Response.Write(de2.Properties["givenname"].Value);
Response.Write(de2.Properties["sn"].Value);

}
}



لازم به توضیح است برنامه ام web App است بر روی سرور Publish کرده ام و تنظیمات IIS انجام داده ام و بر روی کامپیوتر دیگر که توی domin این سرور قرار دارد در broswer اجرا کردم اما user name و domain خالی بر می گرداند

کد برنامه این است



string username = HttpContext.Current.Request.ServerVariables["AUTH_USER"];
string[] str = User.Identity.Name.Split('\\');

if (str.Count() == 1)
{
Label1.Text = " domain is Null ";
Label2.Text = " User anem is Null ";
}
else
{
Label1.Text = str[0];
Label2.Text = str[1];
}

if (string.IsNullOrEmpty(username))
Label3.Text = "user name is null " ;
else
Label3.Text = username ;

spicirmkh
یک شنبه 28 فروردین 1390, 19:23 عصر
سلام

با تشکر از آقا محسن و کمک فراوان در پاسخ به سوالاتم

مشکل کارپیدا کرده ام که چرا مقدار user خالی برمی گرداند چون باید توی سرور IIS قسمت Directory Security وارد قسمت Authentication and access Control شده و تیک Enable anymouse access را برداشته و Intgrated windows Autentication تیک می زنید

با تشکر

spicirmkh
دوشنبه 29 فروردین 1390, 09:07 صبح
سلام

من domain مختلف دارم و برنامه بصورت Forms Authentication with Active Directory طراحی کرده ام اما یک domain که برنامه روی سرور قرار دارد می شناسد آیا می توانم domain دیگر برایش تعریف کنم

با تشکر

mohsen_zelzela00
دوشنبه 29 فروردین 1390, 10:03 صبح
توی web App این NameSpace نیست فکر کنم windows 7 این دستور پشتیبانی نمی کند


Windows 7, Windows Vista SP1 or later, Windows XP SP3, Windows Server 2008 (Server Core Role not supported), Windows Server 2008 R2 (Server Core Role not supported), Windows Server 2003 SP2

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

دوست عزیز یک Reference رو باید Add کنی. من هم با win7 کار می کنم.

ParsaNM
شنبه 22 مرداد 1390, 11:58 صبح
دوستان عزيز من هم دقيقا همين مشکل را دارم وقتي رو IIS نصب ميشه مقدار null ميشه ...! در حقيقت HttpContext.Current.User.Identity.IsAuthenticated مقدار false رو بر ميگردونه ...! من authentication mode="Windows" رو برقرار کردم و سيتم در حالت عادي کار ميکنه ...! حالت عادي وقتيه که با asp کانکت ميکنم وقتي که در visual studio تنظيم ميکنم که با IIS بياد بالا ديگه مقدار کاربر خالي ميشه ..!