O servidor LDAP não está disponível
a tentar ligar-se a um servidor ldap com PrincipalContext
. Tentei todas as soluções neste site sem sucesso.
coisas que tentei:
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");
todos dão o mesmo resultado:
servidor LDAP não disponível
apenas ContextType.Machine
funciona basicamente.
não sei se o meu servidor LDAP está configurado correctamente:
- Máquina: localhost
- Porto: 389
- Base DN: dc=maxcrc, dc=com
- URL: ldap: / / localhost:389 / dc=maxcrc, dc=com
a testar com o navegador Softerra LDAP
todos os tutoriais do início ao fim serão muito apreciados...
6 answers
Sou capaz de me ligar facilmente usando o seguinte código:
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 */
PrincipalContext insPrincipalContext =
new PrincipalContext(ContextType.Domain,
"ldap://localhost:389/dc=maxcrc,dc=com",
userName,
password);
Certifique-se também que o seu nome de utilizador tem domínio nele.
Por exemplo,
userName = "mydomainname" + "\\" + "john_jacobs"
Em vez disso, tente o seu endereço da máquina local:
ldap://127.0.0.1:389/dc=maxcrc,dc=com
Se isso não funcionar, eu ligava a Wireshark e mandava-a capturar o tráfego na porta 389, enquanto tenta ligar-se através da Softerra.
No meu tempo a trabalhar com os DirectoryServices LDAP e.Net, esse erro normalmente significa que a sintaxe ou convenção de nomes do caminho está incorrecta, ou não aponta para um ponto final de directório válido.
Esse erro pode ser devido a tentar ligar-se como" anónimo " sem especificá-lo explicitamente. Por padrão, todas as conexões são negociáveis. Então, se você tentar algo assim você pode tentar o seguinte:
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;
Utilize a seguinte sobrecarga do construtor para:PrincipalContext
:
public PrincipalContext(
ContextType contextType,
string name,
string container
)
E separar o nome do servidor do texto 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
No meu ambiente tive de criar o contexto principal apenas com o nome da máquina do controlador de domínio, e depois validar separadamente as credenciais do utilizador.
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();
}
Este exemplo permite que todas as três destas variações do utilizador validem:
- TestUser
MyDomain\TestUser [email protected]