2013-01-23 40 views
7

Tôi là tổng số người mới tham giaMáy chủ LDAP không khả dụng

Đang cố gắng kết nối với máy chủ ldap với PrincipalContext. Tôi đã thử tất cả các giải pháp trên trang web này không có kết quả.

Những điều tôi đã cố gắng:

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"); 

Tất cả các cung cấp cho các kết quả tương tự:

máy chủ LDAP không có sẵn

Chỉ ContextType.Machine công trình cơ bản.

Không chắc nếu máy chủ LDAP của tôi được thiết lập một cách chính xác:

  • Host: localhost
  • Cổng: 389
  • Căn cứ DN: dc = maxcrc, dc = com
  • URL: ldap: // localhost: 389/dc = maxcrc, dc = com

Testing với Softerra LDAP Browser

Bất kỳ hướng dẫn từ đầu đến cuối sẽ được nhiều đánh giá cao ...

+3

Điều này nghe có vẻ ngu ngốc, nhưng hãy thử 'LDAP: //' thay vì 'ldap: // 'như tôi biết đó là kết nối cố định cho tôi trong quá khứ – freefaller

+0

không có kết quả tương tự. nhưng cảm ơn – Anarchy101

+0

Bạn có thể kết nối với máy chủ LDAP bằng bất kỳ công cụ AD chuẩn nào không? – mellamokb

Trả lời

0

Bạn có thể muốn thử địa chỉ máy tính cục bộ của bạn thay vì:

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

Nếu điều đó không làm việc, tôi muốn cháy lên Wireshark và có lưu lượng truy cập trên cổng 389 khi bạn đang cố gắng kết nối qua Softerra.

Trong thời gian làm việc với LDAP và .Net DirectoryServices, lỗi đó thường có nghĩa là cú pháp hoặc quy ước đặt tên của đường dẫn không chính xác hoặc không trỏ đến điểm kết thúc thư mục hợp lệ.

0

Lỗi đó có thể là do cố gắng kết nối dưới dạng "Ẩn danh" mà không chỉ định rõ ràng. Theo mặc định, tất cả các kết nối đều được thỏa thuận. Vì vậy, nếu bạn thử một cái gì đó như thế, bạn có thể thử những điều sau đây:

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

Tôi có vấn đề tương tự. Nó bật ra rằng tôi đã phải vượt qua tên người dùng và mật khẩu trong khởi tạo đối tượng. Vui lòng thử sử dụng tuyên bố như sau:

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

Đồng thời đảm bảo tên người dùng của bạn có miền trong đó.

Ví dụ,

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

Đối với tôi, nó làm việc truyền các thông tin trực tiếp vào khởi tạo đối tượng như bạn đã đề xuất. –

5

tôi đã phải đối mặt với cùng một vấn đề và tôi tìm thấy một giải pháp.

Tôi có thể kết nối dễ dàng sử dụng đoạn mã sau:

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, cảm ơn. tôi sẽ quan tâm từ các bài viết tiếp theo. –

+0

Chỉ định tên máy chủ lưu trữ đã hoạt động cho tôi. Tôi đã có thể sử dụng người dùng không có miền cho 'ADUser_Id'. Bài tốt. – vapcguy

0

Sử dụng quá tải constructor sau đây cho PrincipalContext:

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

Và tách tên máy chủ từ chuỗi 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

Trong môi trường của mình, tôi phải tạo ngữ cảnh chính chỉ với tên máy chủ lưu trữ tên miền, và sau đó xác thực riêng xác thực người dùng.

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(); 
} 

Ví dụ này cho phép tất cả ba trong số những biến thể tên người dùng để xác nhận:

Các vấn đề liên quan