Signatur
Beschreibung
ldap_exop_whoami() ist eine Hilfsfunktion für die erweiterte LDAP-Operation WHOAMI gemäß RFC 4532. Sie sendet eine WHOAMI-Anfrage an den verbundenen LDAP-Server und erhält die Autorisierungs-ID (Authorization Identity) des aktuell authentifizierten Benutzers der Verbindung zurück.
Die zurückgegebene Autorisierungs-ID ist typischerweise in der Form dn:cn=Benutzer,dc=example,dc=com oder u:username codiert. Bei einer anonymen Verbindung gibt der Server in der Regel einen leeren String zurück.
Diese Funktion ist besonders nützlich, um nach einem ldap_bind()-Aufruf zu verifizieren, mit welchem Benutzerkontext die aktuelle Verbindung tatsächlich arbeitet. Das hilft bei der Fehlersuche und zur Absicherung, dass die Authentifizierung mit den erwarteten Credentials erfolgt ist.
Intern ruft diese Funktion ldap_exop() mit dem OID 1.3.6.1.4.1.4203.1.11.3 auf. Für fortgeschrittene Anwendungsfälle (z. B. mit Request-Daten oder direktem Zugriff auf die Antwort) kann ldap_exop() direkt verwendet werden.
Parameter
| Name | Typ | Default | Beschreibung |
|---|---|---|---|
| $ldap Pflicht | LDAP\Connection | Eine gültige LDAP-Verbindungsressource, wie sie von ldap_connect() zurückgegeben wird. Die Verbindung sollte bereits über ldap_bind() authentifiziert sein. |
Rückgabewert
dn:cn=admin,dc=example,dc=com) oder einen leeren String bei anonymer Verbindung. Bei einem Fehler wird false zurückgegeben.Beispiele
Aktuelle Autorisierungs-ID nach ldap_bind() abfragen
<?php
$ldap = ldap_connect('ldap://ldap.example.com');
if (!$ldap) {
die('Verbindung fehlgeschlagen.');
}
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
$bindDn = 'cn=admin,dc=example,dc=com';
$bindPw = 'geheimesPasswort';
if (!ldap_bind($ldap, $bindDn, $bindPw)) {
die('Bind fehlgeschlagen: ' . ldap_error($ldap));
}
$whoami = ldap_exop_whoami($ldap);
if ($whoami === false) {
echo 'WHOAMI-Operation fehlgeschlagen: ' . ldap_error($ldap);
} else {
echo 'Angemeldet als: ' . $whoami . PHP_EOL;
// z. B.: Angemeldet als: dn:cn=admin,dc=example,dc=com
}
ldap_unbind($ldap);
?>
Anonyme Verbindung prüfen
<?php
$ldap = ldap_connect('ldap://ldap.example.com');
ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3);
// Anonymer Bind (kein DN, kein Passwort)
ldap_bind($ldap);
$whoami = ldap_exop_whoami($ldap);
if ($whoami === '') {
echo 'Verbindung ist anonym (nicht authentifiziert).' . PHP_EOL;
} elseif ($whoami === false) {
echo 'Fehler bei der WHOAMI-Abfrage.' . PHP_EOL;
} else {
echo 'Angemeldet als: ' . $whoami . PHP_EOL;
}
ldap_unbind($ldap);
?>
// Wichtig · Fallstricke
Serverunterstützung: Nicht alle LDAP-Server unterstützen die erweiterte WHOAMI-Operation. OpenLDAP ab Version 2.1 und Active Directory unterstützen sie in der Regel, ältere oder nicht standardkonforme Server möglicherweise nicht. Prüfe in dem Fall die Fehlermeldung mit ldap_error().
LDAP v3 erforderlich: Die erweiterte Operation setzt LDAPv3 voraus. Stelle sicher, dass ldap_set_option($ldap, LDAP_OPT_PROTOCOL_VERSION, 3) vor dem Bind gesetzt wird, andernfalls schlägt die Funktion fehl.
PHP-Klassen-Objekt: Ab PHP 8.1 erwartet die Funktion ein LDAP\Connection-Objekt statt einer veralteten resource. Die bisherige resource-Schreibweise ist ab PHP 8.1 deprecated.