[英]Connect to LDAP server and hit error in ASP.NET C# webform
我在 Webforms 應用程序中使用 Windows 身份驗證,我想獲取用戶的電子郵件地址,但我認為我在連接到服務器時遇到了錯誤。 我的代碼有什么問題嗎?
我試過帶/不帶域名的strAccountId
(sAMAccountName=john)
。
服務器無法運行。
說明:執行當前 Web 請求期間發生未處理的異常。 請查看堆棧跟蹤以獲取有關錯誤及其源自代碼的位置的更多信息。
異常詳細信息:System.Runtime.InteropServices.COMException:服務器無法運行
代碼:
string path = "LDAP://XYZ.LOCAL/CN=XYZ.LOCAL,OU=XXX,DC=XYZ,DC=LOCAL";
// The value of User.Identity.Name is XYZ\john
string strAccountId = "XYZ\\john";
string strPassword = "xxxxx";
bool bSucceeded;
string strError;
DirectoryEntry adsEntry = new DirectoryEntry(path, strAccountId, strPassword);
DirectorySearcher adsSearcher = new DirectorySearcher(adsEntry);
adsSearcher.Filter = "(sAMAccountName=" + strAccountId + ")";
try
{
SearchResult adsSearchResult = adsSearcher.FindOne();
bSucceeded = true;
strError = "User has been authenticated by Active Directory.";
EmailMsg.Text = strError;
adsEntry.Close();
}
catch (Exception ex)
{
bSucceeded = false;
strError = ex.Message;
EmailMsg.Text = strError;
adsEntry.Close();
}
在路徑中你不能放置 OU,你需要在 adsEntry.Path 之后這樣做。
string path = "LDAP://XYZ.LOCAL";
string strAccountId = "XYZ.LOCAL\\john";
string strPassword = "xxxxx";
DirectoryEntry adsEntry = new DirectoryEntry(path, strAccountId, strPassword);
adsEntry.Path = "LDAP://CN=XYZ.LOCAL,OU=XXX,DC=XYZ,DC=LOCAL";
您的路徑包含三個部分:
LDAP://
是協議XYZ.LOCAL
是要連接的服務器。 這是可選的,如果您運行它的計算機加入了您嘗試連接的同一個域或受信任的域,則可以將其排除在外。CN=XYZ.LOCAL,OU=XXX,DC=XYZ,DC=LOCAL
是域上要綁定的對象。 這也是可選的。 如果排除,它將綁定到第 2 部分中的服務器所屬的域的根。 您必須包含第 2 部分或第 3 部分,或兩者都包含。 由於您已包含可選的服務器名稱,它將嘗試在默認 LDAP 端口 389 上連接到XYZ.LOCAL
。“服務器無法運行”意味着它無法在端口 389 上打開與XYZ.LOCAL
的連接。這是網絡錯誤,您需要弄清楚為什么無法從您運行它的計算機訪問域。
您可以使用以下命令在 PowerShell 中測試連接:
Test-NetConnection XYZ.LOCAL -Port 389
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.