wir probieren seit Stunden ein verschlüsseltes Passwort auf LDAP zu authentifizieren. Wir können Connecten (ldap_connect) und binden (anonym und mit credentials)...! Jetzt wollen wir ein SHA Passwort vergleichen mit Username etc... wie geht das?
Unser System:
Ubuntu Server / LDAP Server / PHP 5 (alles neuste Versionen).
Über PHP connecten wir zum LDAP Server und Binden auch. Binden können wir aber auch anonym, daher gehen wir davon aus, dass dies noch nicht die gewünschte Authentifizierung ist. Gerne möchten wir schon bei der Eingabe im HTML / JS das Passwort mit einem SHA versehen, und dann nur diesen Hash im PHP mit LDAP vergleichen. Sprich, wir möchte keine Passwörer Klartext haben/nirgends.
Idee
$ldappass = sha1($ldappass);
$ldappass = "{SHA}" . base64_encode($ldappass); > und dann compare oder mit search vergleichen...!?
Result/Search liefert nur angemeldet PW zurück, und keine fremden
$res = @ldap_search($ldapconn, $ldapdc, "cn=Administrator");
$entries = ldap_get_entries($ldapconn, $res);
echo json_encode($entries, JSON_FORCE_OBJECT);
Unser Code jetzt:
(nimmt credentials per POST an und prüft diese und gibt ein JSON Objekt an JS retour mit Status)
Wer kann helfen/ Kennt sich mit LDAP aus? Wir schwimmen und müssten in 2 Wochen fertig sein... ....
Unser System:
Ubuntu Server / LDAP Server / PHP 5 (alles neuste Versionen).
Über PHP connecten wir zum LDAP Server und Binden auch. Binden können wir aber auch anonym, daher gehen wir davon aus, dass dies noch nicht die gewünschte Authentifizierung ist. Gerne möchten wir schon bei der Eingabe im HTML / JS das Passwort mit einem SHA versehen, und dann nur diesen Hash im PHP mit LDAP vergleichen. Sprich, wir möchte keine Passwörer Klartext haben/nirgends.
Idee
$ldappass = sha1($ldappass);
$ldappass = "{SHA}" . base64_encode($ldappass); > und dann compare oder mit search vergleichen...!?
Result/Search liefert nur angemeldet PW zurück, und keine fremden
$res = @ldap_search($ldapconn, $ldapdc, "cn=Administrator");
$entries = ldap_get_entries($ldapconn, $res);
echo json_encode($entries, JSON_FORCE_OBJECT);
Unser Code jetzt:
(nimmt credentials per POST an und prüft diese und gibt ein JSON Objekt an JS retour mit Status)
PHP-Code:
if($_POST['f'] == 'authentificateLDAP'){
$ldaphost = "192.15.15.249";
$ldapdc = "dc=tre,dc=sdf";
$ldapport = "389";
$ldappass = $_POST['pw'];
//$ldapou = "ou=" . $_POST['ou']; //ou organizationalUnit
//if($_POST['uid']){
// $ldapuid = "uid=" . $_POST['uid']; //uid userId
// $ldaprdn = $ldapuid . "," . $ldapdc;
//}else
if($_POST['cn']){
$ldapcn = "cn=" . $_POST['cn']; //commonName = cn
$ldaprdn = $ldapcn . "," . $ldapdc;
}
// connect to the ldap Server
$ldapconn = ldap_connect( $ldaphost, $ldapport )
or die( "No Connection to {$ldaphost} possible" );
//change Protocoll because of failure message "Protocol error"
ldap_set_option($ldapconn, LDAP_OPT_PROTOCOL_VERSION, 3);
if ($ldapconn) {
try{
$ldapbind = ldap_bind($ldapconn, $ldaprdn, $ldappass);
}catch(Object $exc){
}
// authentification code
if ($ldapbind) {
if($ldappass == ""){
$res = @ldap_search($ldapconn, $ldapdc, $ldapcn);
$authentificationArray['state']='nok';
$authentificationArray['jsFiles']="test";
$authentificationArray['htmlCode']= '0';
$authentificationArray['message']='No password recieved';
echo json_encode($authentificationArray, JSON_FORCE_OBJECT);
}else{
//if the authentification worked, we create a JSON object with the OK state and several information to JS create the site
$authentificationArray['state']='ok';
$authentificationArray['jsFiles']="test";
$authentificationArray['htmlCode']='';
$authentificationArray['message']='User bound';
echo json_encode($authentificationArray, JSON_FORCE_OBJECT);
}
} else {
//if the authentification failed, we look up, if the username exists and message wheter the username or the passwort is wrong
$res = @ldap_search($ldapconn, $ldapdc, $ldapcn);
$authentificationArray['state']='nok';
$authentificationArray['jsFiles']="test";
$authentificationArray['htmlCode']= '0';
if (!$res) {
$authentificationArray['message']='User not found';
echo json_encode($authentificationArray, JSON_FORCE_OBJECT);
} else {
$entries = ldap_get_entries($ldapconn, $res);
$authentificationArray['message']= $entries["count"] . ' Users found - PW wrong';
echo json_encode($authentificationArray, JSON_FORCE_OBJECT);
}
}
}
}