我在嘗試診斷客戶端網站上運行的服務器應用程序的問題。所述應用程序針對AD環境中的域控制器驗證用戶憑證。我們看到的行爲是週期性的,用戶無法通過服務器進行身份驗證。疑難解答幫助:活動目錄綁定失敗
我們已經基本追溯了「綁定」失敗的失敗。爲了進一步診斷問題,我構建了一個超級簡單的工具,它執行兩種類型的綁定:一種使用LDAP服務器綁定,一種使用WinNT綁定。我們的服務器應用程序只執行LDAP綁定,但爲了添加控件,我向WinNT綁定中投擲。
public static void DoWinNTBind(string domain, string login, string password)
{
Logger.Log("Starting WinNT Bind to {0}",domain);
try
{
var serverPath = String.Format("WinNT://{0}",domain);
Logger.Log("Creating DirectoryEntry object for {0} on domain {1}", login, serverPath);
using (DirectoryEntry de = new DirectoryEntry(serverPath, login, password, AuthenticationTypes.Secure | AuthenticationTypes.Sealing))
{
if (!de.NativeObject.Equals(null))
{
Logger.Log("WinNT Bind Success");
}
else
{
Logger.Log("WinNT Bind Failed");
}
}
}
catch(Exception ex)
{
Logger.Log("{0} occured during WinNT Bind: {1}",ex.GetType().Name,ex.Message);
Logger.Log("Stack: {0}",ex.StackTrace);
}
}
public static void DoLDAPBind(string domain,string login, string password)
{
Logger.Log("Starting LDAP Bind to {0}",domain);
try
{
var serverPath = String.Format("LDAP://{0}",domain);
Logger.Log("Creating DirectoryEntry object for {0} on domain {1}", login, serverPath);
using (DirectoryEntry de = new DirectoryEntry(serverPath, login, password, AuthenticationTypes.Secure | AuthenticationTypes.Sealing))
{
if (!de.NativeObject.Equals(null))
{
Logger.Log("LDAP Bind Success");
}
else
{
Logger.Log("LDAP Bind Failed");
}
}
}
catch(Exception ex)
{
Logger.Log("{0} occured during LDAP Bind: {1}",ex.GetType().Name,ex.Message);
Logger.Log("Stack: {0}",ex.StackTrace);
}
}
正如您所看到的,除了使用System.DirectoryServices.DirectoryEntry連接到DC之外,沒有太多的代碼。
生成的日誌文件是(名稱和域掩碼)。
6/29/2010下午2點52分17秒:執行AD 結合爲USER1 6/29/2010下午2點52分17秒: 開始LDAP綁定到XXX.XXX 6/29/2010 02:52:17 PM:創建 域上的DirectoryEntry對象 LDAP://xxx.xxx 6/29/2010 2:52:17 PM: 在LDAP綁定期間DirectoryServicesCOMException發生 :登錄失敗: 未知的用戶名或密碼錯誤。
6/29/2010下午2時52分17秒:堆棧:在 System.DirectoryServices.DirectoryEntry.Bind(布爾 throwIfFail)在 System.DirectoryServices.DirectoryEntry.Bind() 在 的System.DirectoryServices。 DirectoryEntry.get_NativeObject() 在 AdmitOne.Superglue.ActiveDirectoryHelper.DoLDAPBind(字符串 域,字符串登錄,字符串密碼) 在 C:\項目\加拉帕戈斯\分支\合同\ 2.0_SN_Peer \ SRC \工具\強力膠\ ActiveDirectoryHelper .cs:行 47 6/29/2010 2:52:17 PM:開始 WinNT與xxx.xxx綁定2010年6月29日 下午2時52分17秒:在域 創建的DirectoryEntry 對象USER1 WINNT://xxx.xxx 6/29/2010下午2時52分18秒: WINNT綁定成功
所以相同的用戶名稱無法使用LDAP綁定,但成功使用WinNT!
本地在我們的測試環境中,我們沒有看到這種行爲,LDAP和WinNT都沒有問題成功。
所以我卡住了。我想說這是他們的廣告環境的一個問題,但沒有吸菸槍,我不能。
我第一次詢問Stack,以確保我的綁定代碼是正確的。之後,我可能需要在Serverfault上進行重新評估,這是更適合尋求AD特定問題的地方。