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 بياد بالا ديگه مقدار کاربر خالي ميشه ..!
vBulletin® v4.2.5, Copyright ©2000-1404, Jelsoft Enterprises Ltd.