2013-01-23 150 views
7

我是一個總的新手到這個LDAP服務器不可用

試圖與PrincipalContext連接到LDAP服務器。我已嘗試在此網站上的所有解決方案無濟於事。

事情我已經嘗試:

PrincipalContext insPrincipalContext = 
    new PrincipalContext(ContextType.Domain); 

PrincipalContext insPrincipalContext = 
    new PrincipalContext(ContextType.Domain, "ldap://localhost:389/dc=maxcrc,dc=com"); 

PrincipalContext insPrincipalContext = 
    new PrincipalContext(ContextType.Domain, "maxcrc.com"); 

所有產生相同的結果:

LDAP服務器不可

只有ContextType.Machine作品基本。

不知道如果我的LDAP服務器設置正確:

  • 主機:本地主機
  • 端口:389
  • 基本DN:DC = maxcrc,DC = com的
  • 網址:LDAP: //本地主機:389/DC = maxcrc,DC = COM

測試與Softerra的LDAP瀏覽

從開始的任何教程,以完成將非常感激......

+3

這聽起來很愚蠢,但試試'LDAP://'而不是'ldap://'因爲我知道它在過去的 – freefaller

+0

中對我來說是固定的連接。但感謝 – Anarchy101

+0

您是否可以使用任何標準AD工具連接到LDAP服務器? – mellamokb

回答

0

你可能想試試你的本地計算機的地址,而不是:

ldap://127.0.0.1:389/dc=maxcrc,dc=com 

如果不行,我會火起來的Wireshark ,並在您嘗試通過Softerra進行連接時讓它捕獲端口389上的流量。

在我使用LDAP和.Net DirectoryServices的時候,這個錯誤通常意味着路徑的語法或命名約定不正確,或者不指向有效的目錄結束點。

0

該錯誤可能是由於嘗試連接爲「匿名」而未明確指定。 默認情況下,所有連接都是可協商的。所以,如果你嘗試這樣的事情,你可以試試以下內容:

LdapDirectoryIdentifier ldap = new LdapDirectoryIdentifier("My Hostname or IP Address",10389); //10389 might be your non default port 
LdapConnection connection = new LdapConnection(ldap); 
connection.AuthType = AuthType.Anonymous; 
3

我有類似的問題。事實證明,我必須在對象初始化中傳遞用戶名和密碼。請嘗試使用下面的語句:

PrincipalContext insPrincipalContext = 
new PrincipalContext(ContextType.Domain, 
"ldap://localhost:389/dc=maxcrc,dc=com", 
userName, 
password); 

還請確保您的用戶名中包含域。

例如,

userName = "mydomainname" + "\\" + "john_jacobs" 
+0

對我來說,它工作,直接傳遞憑據到對象初始化,如你所建議的。 –

5

我一直面臨着同樣的問題,我找到了解決辦法。

我能夠輕鬆地連接使用下列代碼:

ADUser_Id = "domainName\\username"; //make sure user name has domain name. 
Password = "xxxx"; 
var context = new PrincipalContext(ContextType.Domain,"server_address", ADUser_Id,Password); 
/* server_address = "192.168.15.36"; //don't include ldap in url */ 
+0

@Damian,謝謝。我會關心下一篇文章。 –

+0

指定服務器主機名爲我工作。我能夠使用沒有ADUser_Id域的用戶。好帖子。 – vapcguy

0

使用PrincipalContext以下構造函數重載:

public PrincipalContext(
    ContextType contextType, 
    string name, 
    string container 
) 

而且從LDAP字符串分隔服務器名稱:

PrincipalContext insPrincipalContext = 
    new PrincipalContext(ContextType.Domain, "localhost:389", "dc=maxcrc,dc=com"); 

https://msdn.microsoft.com/en-us/library/bb348316%28v=vs.110%29.aspx

0

在我的環境中,我必須使用域控制器主機名創建主體上下文,然後分別驗證用戶憑據。

string domainControllerName = "PDC"; 
string domainName = "MyDomain"; // leave out the .Local, this is just to use as the prefix for the username if the user left it off or didn't use the principal address notation 
string username = "TestUser"; 
string password = "password"; 

using (var ldap = new PrincipalContext(ContextType.Domain, domainControllerName)) 
{ 
    var usernameToValidate = username; 
    if (!usernameToValidate.Any(c => c == '@' || c == '\\')) 
      usernameToValidate = $"{domainName}\\{username}"; 

    if (!ldap.ValidateCredentials(username, context.Password, ContextOptions.SimpleBind)) 
     throw new UnauthorizedException(); 
} 

此示例允許所有三種這些變化,以用戶名的驗證: