php-LDAP-Ungültige Anmeldeinformationen
Mein code ist:
$user = 'test';
$password = 'testpass';
$host = '10.1.1.1';
$port = 389;
$basedn = 'dc=ci,dc=mycompany,dc=com';
$group = 'Users';
$ldaprdn = 'uid=test,dc=ci,dc=mycompany,dc=com';
$ad = ldap_connect("ldap://$host", $port);
if ($ad) {
echo "Connected" . "<br/>";
} else {
echo ldap_error($ad) . "<br/>";
}
ldap_set_option($ad, LDAP_OPT_PROTOCOL_VERSION, 3);
ldap_set_option($ad, LDAP_OPT_REFERRALS, 0);
// $ldapBind = ldap_bind($ad, "{$user}@{$domain}", $password); //1.
// $ldapBind = ldap_bind($ad, $user, $password); //2.
$ldapBind = ldap_bind($ad, $ldaprdn, $password); //3.
// $ldapBind = ldap_bind($ad, null, null); //4.
if ($ldapBind) {
echo "Binded" . "<br/>";
} else {
echo ldap_error($ad) . "<br/>";
}
Nun benutze ich die Kommentar Zeile "3", erhalten:
Connected
Invalid credentials
Wenn die Nutzung der Kommentar-Zeile, die mit "1" oder "2", erhalten:
Connected
Invalid DN syntax
Wenn die Nutzung der Kommentar-Zeile "4" (dies ist anonymouse), erhalten:
Connected
Binded
Dies ist die Entwicklung unter Ubuntu 12.
, Warum bekomme ich von Ungültigen Anmeldeinformationen Fehler von Kommentar-Zeile "3"? Wie binden Sie die Authentifizierung richtig?
Vielen Dank im Voraus!
- Meine Umgebung ist Ubuntu 12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Den
ldap_bind
Funktion scheint zu erfordern, ein DN, nicht ein RDN, egal was der doc sagt. Wenn dies der Fall ist, dann:{$user}@{$domain}
ist nicht korrekt formatiert DN, folglich:Invalid DN syntax
test
ist nicht korrekt formatiert DN, folglich:Invalid DN syntax
Informationen über die string-Darstellung der Formatierung von DN, siehe RFC4514
überprüfen, mit bekannt gutem Werkzeug
Soweit ich das beurteilen kann, Nummer 3 ist die einzig richtige der vier zur Verfügung gestellt werden. Der Directory-Server hat angegeben, in den BIND-Antwort, dass es war nicht sicher, dass die bereitgestellte Passwort
testpass
abgestimmt und das Kennwort, das in der Datenbank gespeichert. In diesem Fall empfehle ich die überprüfung das Kennwort mit einer bekannt guten tool wieldapsearch
.Diese
ldapsearch
Bindet das Verzeichnis als "uid=test,dc=ci,dc=mycompany,dc=com" mit dem Kennworttestpass
und ruft die DN deruid=test
Eintrag. Wenn das fehlschlägt mit "invalid credentials" Fehler, dann gibt es diese Möglichkeiten:testpass
ist nicht das richtige Passwortuid=test
Eintrag nicht vorhanden ist. Der Punkt oben erklärt, das Ergebnis wäre eine "ungültige Anmeldeinformationen". Es hat keinen Sinn zu sagen, ein Angreifer, dass ein Eintrag nicht vorhanden ist - das würde die Angreifer mit zusätzlichen Informationen (er hat one less DN zu versuchen).jargon und LDAP-sprechen
Im Interesse der richtigen jargon:
$ldaprdn
ist nicht ein RDN, es ist eine DN. RDNs sind Bestandteile der DNssiehe auch
Finde ich das problem, das $ldaprdn = 'uid=test,dc=ci,dc=mycompany,dc=com' ist nicht als gleiche, wie es auf dem LDAP-server nach dem ändern funktioniert es gut.
@Annamalai.Somasundaram,
DN übergeben werden sollen, so etwas wie cn=test,ou=Users,dc=ci,dc=mycompany,dc=com
die richtige Schreibweise gefunden werden kann, die auf die spezifischen LDAP-server