簡體   English   中英

連接到 LDAP 服務器並在 ASP.NET C# webform 中遇到錯誤

[英]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";
   

您的路徑包含三個部分:

  1. LDAP://是協議
  2. XYZ.LOCAL是要連接的服務器。 這是可選的,如果您運行它的計算機加入了您嘗試連接的同一個域或受信任的域,則可以將其排除在外。
  3. 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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM