سؤال

ولقد شكلت مثيل ADAM وإضافة بعض المستخدمين الاختبار. من ج # يمكنني ربط ADAM باستخدام حساب ويندوز لكنني لا يمكن ربط باستخدام أحد المستخدمين ADAM. (I يمكن ربط بنجاح المستخدمين آدم في الحزب الديمقراطي الحر) ولقد حرصت على تمكين المستخدمين من خلال تحديد السمة UserAccountDisabled مسدس لكاذبة. عندما ربط مع ويندوز حسابي يمكنني بنجاح البحث واعادة الممتلكات للمستخدمين ADAM ولكن أنا لا تزال تكافح من أجل المصادقة عليها، عندما أحاول وربط مع حساب المستخدم ADAM I الحصول على خطأ:

خطأ: System.Runtime.InteropServices.COMException (0x8007052E): فشل تسجيل الدخول: اسم المستخدم غير معروف أو كلمة المرور غير صحيحة. في System.DirectoryServices.DirectoryEntry.Bind (منطقية throwIfFail)

وهنا هو رمز أنا باستخدام:

string userName = txtUserName.Text;
string password = txtPassword.Text;
string ADConnectionString = "LDAP://localhost:389/CN=sandbox,DC=ITOrg";
DirectoryEntry entry = new DirectoryEntry(ADConnectionString);

entry.Username = "myComputer\\Administrator";
entry.Password = "myPassword";
try 
{
DirectorySearcher searcher = new DirectorySearcher(entry);
searcher.Filter = "(&(objectClass=user)(CN=" + userName + "))";
SearchResultCollection result = searcher.FindAll();
if (result.Count > 0)
{
    //bind with simple bind
    using (DirectoryEntry de = new DirectoryEntry(result[0].Path, userName, password,AuthenticationTypes.None))
    {
         if (de.Guid != null) // this is the line where it dies
         {
              Label1.Text = "Successfully authenticated";
              Label2.Text = result[0].Properties["displayName"][0].ToString();
              Label3.Text = result[0].Properties["telephoneNumber"][0].ToString();
          } else 
          {
             Lable1.Text = "Unable to Authenticate";
          }
     }
}
else
{
    Lable1.Text = "UserName :" + userName + " not found"; 
}
} catch(Exception ex)
{
     Label1.Text = "Error searching: " + ex.ToString();
}

ويرجع الفضل في ذلك مسبقا لأية مساعدة، محل تقدير كبير!

هل كانت مفيدة؟

المحلول

وربما يكون من مشكلة تنسيق اسم المستخدم. عند مصادقة مستخدم ADAM في SDS، يجب عليك استخدام LDAP ربط بسيطة واستخدام تنسيق اسم بدعم من ADAM. ADAM يسمح من الناحية الفنية لك استخدام دايجست المصادقة كذلك، ولكن هذا غير متوفر في SDS (SDS.Protocols فقط)، بحيث لا ينطبق على نهج التعليمات البرمجية.

وكنت تستخدم ربط بسيط لأنك وضعت AuthenticationTypes.None حتى ذلك الجزء على ما يرام. الجزء الذي يحتمل الخطأ ثم هو الشكل المستخدم.

وADAM يقبل الكامل DN المستخدم، DISPLAYNAME الخاصة بهم (إذا وضع وفريدة من نوعها) و / أو userPrincipalName (إذا وضع وفريدة من نوعها)، واسم المستخدم "يمكن ربطها"، لذلك يبدأ مع DN الكامل للمستخدم والاطلاع عليه ما اذا كان يعمل . إذا كان الأمر كذلك، يمكنك محاولة القيم اسم المستخدم أخرى كذلك. لاحظ أنه يمكنك وضع ما تريد لDISPLAYNAME أو userPrincipalName في ADAM. لا يوجد التحقق من الصحة. فقط تأكد من أن القيم هي فريدة من نوعها.

إذا كنت تريد حقا أن تفعل بعض النوع من الشيء المصادقة ربط ضد ADAM، وستحصل على أفضل الأداء الإقتصادي الأداء وحجم باستخدام أسلوب ValidateCredentials من PrincipalContext في .NET Framework 3.5.

تم توثيق هذا النوع من الاشياء ومناقشتها في المحافل في أكثر من http://www.directoryprogramming.net في كل وقت ومكان أنا يترددون كثيرا في كثير من الأحيان لأنها على موقعي. :) صديق يميل قبالة لي لهذا المنصب أو كنت قد لم يسبق له مثيل.

scroll top