Ldap-Authentifizierung (active directory)

Ldap-Authentifizierung (active directory)

am 09.11.2005 10:51:20 von Hugo Balazs

Hallo NG,

ich soll eine Benutzerauthentifizierung für unser Intranet über einen
Active Directory Server dürchführen. Die Verbindung zum Server hat schon
geklappt. Wie frage ich jetzt den Server ob Benutzer ($_user) und
($_passwd) die richtigen sind? Eine Ja/Nein Antwort würde mir reichen.

// connect to ldap server
$ldapconn = ldap_connect("activedirectoryserver")
or die("Could not connect to LDAP server.");
if ($ldapconn) {
// binding to ldap server
@$ldapbind = ldap_bind($ldapconn);

// verify binding
if ($ldapbind) {
echo "Connexion LDAP ... OK
";
ldap_close($ldapconn);
} else {
echo "Connexion LDAP ... Not OK";
}
}
?>

Vielen Dank für jeder Hilfe
Hugo Balazs

Re: Ldap-Authentifizierung (active directory)

am 10.11.2005 10:21:58 von Alexander Fleischer

Hallo !

Hugo Balazs schrieb:
> Hallo NG,
>
> ich soll eine Benutzerauthentifizierung für unser Intranet über einen
> Active Directory Server dürchführen. Die Verbindung zum Server hat schon
> geklappt. Wie frage ich jetzt den Server ob Benutzer ($_user) und
> ($_passwd) die richtigen sind? Eine Ja/Nein Antwort würde mir reichen.

AD gibt in der Standardeinstellung keine Daten raus, daher braucht es
erstmal einen Account, um sich authentifizieren zu können, zumindest
dann, wenn die Nutzer in verschiedenen OU's liegen und man die erst
nach Benutzernamen suchen muss. Sind alle in der gleichen OU, $user zu
einer DN ergänzen (CN=$user, CN=Users, DC=Domain, DC=DE) und beim
ldap_bind als Benutzername (zusammen mit dem Passwort) übergeben,
Rückgabewert sagt, ob's richtig war. Ansonten mit "bekanntem" Account
anmelden (anonymes bind unten geht nicht zur Suche nach Accounts), mit
ldap_search nach sAMAccountName=$user suchen (DN ermitteln), Verbindung
trennen und mit der ermittelten DN und dem Password neu per ldap_bind
anmelden.

Alexander

Re: Ldap-Authentifizierung (active directory)

am 10.11.2005 10:28:25 von Alexander Fleischer

Hallo,

kleine Ergänzung:

$d["user"], $d["pass"] sind die Eingabedaten:

function login($d) {
require(CONFIG."/ldap.conf");
$ldap = ldap_connect($ldap_conf["host"]);
if (isset($ldap_conf["user"])) {
ldap_bind($ldap, $ldap_conf["user"], $ldap_conf["pass"]);
} else {
ldap_bind($ldap);
}
$res = ldap_search($ldap, $ldap_conf["base"],
"(&(objectclass=$ldap_conf[class])($ldap_conf[attr]=$d[user] ))",
Array("dn"));
$data = ldap_get_entries($ldap, $res);
ldap_unbind($ldap);
$ldap = ldap_connect($ldap_conf["host"]);
if ($data["count"]==0) return false;
if (!@ldap_bind($ldap, $data[0]["dn"], $d["pass"])) return false;
return true;
}


In der ldap.conf steht das:

$ldap_conf = Array(
// Use ldap:// or ldaps:// as prefix
'host' => 'ldaps://ldap.example.com',

// base dn
'base' => 'DC=ldap,DC=example,DC=com',

// bind as user for saerching if anonymous bind is not possible;
for anonymous bind, remove these lines
'user' => 'CN=ldapleser,CN=Users,DC=ldap,DC=example,DC=com',
'pass' => '*******',

// attribute containing the user name
'attr' => 'sAMAccountName',

// objectclass for users
'class' => 'user'
);


Alexander



Hugo Balazs schrieb:
> Hallo NG,
>
> ich soll eine Benutzerauthentifizierung für unser Intranet über einen
> Active Directory Server dürchführen. Die Verbindung zum Server hat schon

Re: Ldap-Authentifizierung (active directory)

am 11.11.2005 09:04:25 von Hugo Balazs

Alexander Fleischer schrieb:

> Hallo !
>
> Hugo Balazs schrieb:
>
>> Hallo NG,
>>
>> ich soll eine Benutzerauthentifizierung für unser Intranet über einen
>> Active Directory Server dürchführen. Die Verbindung zum Server hat


> AD gibt in der Standardeinstellung keine Daten raus, daher braucht es
> erstmal einen Account, um sich authentifizieren zu können, zumindest
> dann, wenn die Nutzer in verschiedenen OU's liegen und man die erst
> nach Benutzernamen suchen muss. ....
>
> Alexander

Danke für den Tipp,

AD ist mir ganz neu und unser Netzadmin konnte mir auch nicht richtig
weiterhelfen. Meinst Du einen speziellen Account für den Zugang zu AD
(wie z.B. zu MySql) oder einen normaler User-Account dessen Daten ich
eigentlich beim Einlogen prüfen möchte? Wir haben ein gemischtes Netz
(Unix, Linux, Windows, Mac) und die Benutzerdaten werden über einen AD
verwaltet. Das Intranet läuft über einen Linux-Rechner (Apache2, PHP,
MySQL).
Hugo

Re: Ldap-Authentifizierung (active directory)

am 11.11.2005 09:48:10 von Alexander Fleischer

Hallo !

Hugo Balazs schrieb:
> AD ist mir ganz neu und unser Netzadmin konnte mir auch nicht richtig
> weiterhelfen. Meinst Du einen speziellen Account für den Zugang zu AD
> (wie z.B. zu MySql) oder einen normaler User-Account dessen Daten ich

Normaler (aber zusätzlicher) User-Account, dessen Daten aber im Script
stehen, da man bei mehreren OU erst mal die DN des Users anhand des
Benutzernamens suchen muss (siehe auch das Script im anderen Posting).
Die Suche geht erst nach Anmeldung am AD, wozu man einen Account mit
bekannter DN braucht. Da die Daten von dem Account mehr oder weniger
öffentlich sind, sollte der natürlich per Policy / Rechteverwaltung
entsprechend eingeschränkt sein, damit damit kein "normaler" Login
möglich ist.
Sind alle User in der gleichen OU (wurden keine OUs angelegt, CN=Users)
kann man sich das sparen, da man dann die OU einfach ergänzen kann.

Alexander